1. 程式人生 > >10-19 壓路機路線(一) 檔案處理

10-19 壓路機路線(一) 檔案處理

---恢復內容開始---

今天閆總緊急要求,修改壓路機路線圖。需要修改點如下:

1.加網格(經緯度),已經有
2.存幾個使用者,畫圖
3.上色,
4.每個使用者加個壓路機的icon,同一時間,多個使用者,同時畫。

工作計劃:
先跑一遍程式碼,寫出程式碼流程。

一些函式知道是什麼意思,但是不能表達出來,比較模糊,現在按照執行順序,開始對各個函式進行解釋:

1.AfxWinMain,功能是被系統呼叫,呼叫InitApplication函式,指向InitInstance,這裡面呼叫了CTestFrameWnd的建構函式,產生了主視窗。然後,顯示視窗,更新視窗傳送標準訊息WM_PAINT最後回到AfxWinMain,執行run函式,進入訊息迴圈。

2.CFileDialog類,開啟和儲存對話方塊。

3.CArray<CString,CString>m_FileItem是動態陣列,就相當於CString m_FileItem[n]。

4.POSITION, 一個抽象的迭代位置,既然是抽象,也就是沒有給定具體的資料型別,以滿足不同的模板引數的需要。其實,它就是一個指標。

5. template< class TYPE, class ARG_TYPE > class CArray : public Cobject。輸入的時候用ARG_TYPE類,輸出的時候用TYPE,自動實現轉換.

6.CArray::Add ,int Add( ARG_TYPE newElement );throw( CMemoryException );   增加一個元素.

7.CArray::SetAtGrow,作用是設定指定元素的值。如果指定的元素已經存在,就把改變指定元素的值。如果指定的元素不存在,也就是 nIndex>=m_nSize的情況,就呼叫SetSize來調整陣列的大小。

8.CFileDialog::GetNextPathName,主要用於獲取選擇的多個檔案的路徑

9.ReadDataBYLine函式中的Strs,每次讀取一行資料,賦值到此處

10.CStdioFile,繼承自CFile,它可以建立一個CStdioFile 物件,代表一個用執行時函式fopen 開啟的C 執行時流式檔案。流式檔案是指的C語言中對檔案的處理方式。 在C語言中,處理檔案時,每次的讀寫操作並不是直接操作儲存器上的物理空間的,而是先會讀出/寫入到一個緩衝區。實際的程式設計中,這個緩衝區是隱式的,並不會被程式設計人員顯示獲知。這種操作的方式就被稱為流式檔案,簡稱流檔案。需要注意的是,這個概念與檔案實際儲存的內容無關,所以不要和儲存型別中的流式檔案和記錄式檔案檔案混淆。無論是哪種檔案,在C語言中都是流檔案形式處理的。

11.GetTickCount,GetTickCount返回(retrieve)從作業系統啟動所經過(elapsed)的毫秒數,它的返回值是DWORD。

12.CStdioFile::ReadString,子類進行虛擬函式重寫。

13.CStdioFile::readfile,成員有

14.DataStruct,資料結構,包括使用者編號兩個,定位時刻,使用者位置,使用者定位狀態,觀測衛星數,DOP值

15.Strs.Left(1) == "$",Left為CString類函式,獲取左數n個字元

CString::Left(int nCount)const; //從左邊1開始獲取前 nCount個字元

CString::Mid(int nFirst)const; //從左邊第 nCount+1個字元開始,獲取後面所有的字元

CStringMid(int nFirst,int nCount)const; //從左邊第 nFirst+1 個字元開始,獲取後面nCount個字元

CStringRight(int nCount)const; //從右邊1開始獲取從右向左前 nCount個字元.

16.CString::FindOneOf,你指定多個字串,然後查詢匹配這些字串其中一個的第一個的位置

17.L: 120,F: processRollerMessage,L和F所代表的含義:

18.USES_CONVERSION。USES_CONVERSION是ATL中的一個巨集定義。用於編碼轉換(用的比較多的是CString向LPCWSTR轉換)。使用USES_CONVERSION一定要小心,它們從堆疊上分配記憶體,直到呼叫它的函式返回,該記憶體不會被釋放。如果在一個迴圈中,這個巨集被反覆呼叫幾萬次,將不可避免的產生stackoverflow。分配的記憶體是在函式的棧中分配的。而VC編譯器預設的棧記憶體空間是2M。當在一個函式中迴圈呼叫它時就會不斷的分配棧中的記憶體。

19.接上一條。T2A=W2A,主要用於Unicode下CString轉換為char *。內部函式alloca是在棧(stack)上申請空間,用完馬上就釋放.  https://blog.csdn.net/linrulei11/article/details/7824954   https://blog.csdn.net/m0_37343248/article/details/56004126

20.char *strtok_r(char *str, const char *delim, char **saveptr);,strtok_r函式是strtok函式的可重入版本。str為要分解的字串,delim為分隔符字串。char **saveptr引數是一個指向char *的指標變數,用來在strtok_r內部儲存切分時的上下文,以應對連續呼叫分解相同源字串。

第一次呼叫strtok_r時,str引數必須指向待提取的字串,saveptr引數的值可以忽略。連續呼叫時,str賦值為NULL,saveptr為上次呼叫後返回的值,不要修改。一系列不同的字串可能會同時連續呼叫strtok_r進行提取,要為不同的呼叫傳遞不同的saveptr引數。

21.atoi。atoi (表示 ascii to integer)是把字串轉換成整型數的一個函式。atof(),是C 語言標準庫中的一個字串處理函式,功能是把字串轉換成浮點數。

22.自定義Mid函式,Mid(char **string, char *result, int length)。呼叫Mid(&result,strDegree,2);取字串前兩位,剩下繼續儲存。

23.座標高斯正反算。  https://blog.csdn.net/m0_37970224/article/details/79677868

24.經緯度轉換為大地座標的解釋。地心座標系與大地座標系。  https://baike.baidu.com/item/%E5%9C%B0%E7%90%86%E5%9D%90%E6%A0%87/798099?fr=aladdin

25._ttof()函式:在mfc中使用寬位元組的轉換函式_ttoi()轉為整型,_ttof()轉為浮點型,使用cstring.format()把整型和浮點型轉為字串

26.畫圖用到的引數:PointNum  m_xDatum  m_yDatum  m_CoorOrigin  m_RightTop  m_PrepareData  m_PrePoint