看板 PCman 關於我們 聯絡資訊
這段時間把C++基礎書再整本過了一遍,幾年前看過了一次4e, 還記得當時有大大推薦5e,所以這次過了5e 相關章節例如各種容器、迭代器iterator、內建演算法、 class和OOP相關(public protected virtual destructor 繼承多型重載)、 Lambda、智慧指標、template等 就花了相當非常多的時間,只算初步閱讀一遍,只有看還沒實際做, 接著找尋MFC有沒有什麼比較深入的教學或書,網路搜尋有幾篇基本的, 書查了一下感覺不算多,後來找到了一本感覺相對比教深入完整的和看起來有範例檔的, 是這本 MFC Windows 程序設計, 2/e MFC Windows程序设计(第2版)(修订版)(附盘) https://www.tenlong.com.tw/products/9787302150428?list_name=srh 翻了前面幾頁之後,就知道又有大量的用法和變數名稱要記, 算是相當非常大量,還有一堆大寫變數, 例如DrawText格式設定傳入的寫法風格是 DT_SINGLELINE|DT_CENTER|DT_VCENTER 要繼續的話又是一條更長更花時間的路 我目前會先到這邊暫停, 之後不確定何時開始繼續學習有新的進度的話再來分享一下, 如有遇到問題再來請教專案貢獻開發的大大 回到這本書, 這本是循序漸進的教,對學習很有幫助, 推測學了一定的量之後,回來看PCMan專案, 應該會離能夠開發專案所需的能力門檻又更近一點 再次感謝之前PCMan專案建置issue很多人的幫忙, 另外也分享一下幾年前請教一位ibb大大得到的寶貴建議: --- 當你找不到進入點時 記得試試看MainFrm.cpp --- 以下紀錄初步查看MFC和專案的一點點個人筆記: --------------------------------------------- MFC中afx_msg是什么,是什么数据类型 https://zhidao.baidu.com/question/183102316.html 例如:afx_msg void OnBnClickedButton1(); 其中 afx_msg为消息标志,bai它向系统声 明:有消息映射到函du数实现体;而在map宏定义中,就有具体消息和此函数的映射定义 (可以是自定义,也可以是系统自动完成的) afx是 application framework 如定义一个Edit的Change处理函数: 一、在类的头文件(*.h)中增加 : //{{AFX_MSG(CDialogDemo) afx_msg void OnChangeEdit1(); //{{AFX_MSG 視窗 最根本主要的類 CWinApp CFrameWnd MFC最開始初始化是在 InitInstance(); class CApp : public CWinApp { public: CApp(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CApp) public: virtual BOOL InitInstance(); virtual int ExitInstance(); https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-gettopwindow GetTopWindow function 12/05/2018 2 minutes to read Examines the Z order of the child windows associated with the specified parent window and retrieves a handle to the child window at the top of the Z order. Syntax C++ Copy HWND GetTopWindow( HWND hWnd ); https://stackoverflow.com/questions/19405196/what-does-a-backslash-in-c-mean What does this code: (especially, what does a backslash '\' ? ) s23_foo += \ s8_foo * s16_bar; As A Line Continuation 再來是 CFrameWnd CWinApp的InitInstance 會 new 一個 繼承 CFramwWnd的類當作視窗 然後 pFrame->UpdateWindow(); 繪製窗口 https://blog.csdn.net/CNHK1225/article/details/45097281 _T("")是一个宏,定义于tchar.h下。 #define __T(x) L ## x #define _T(x) __T(x) -------------------------------------------------------------- _T("Hello")是一个宏,他的作用是让你的程序支持Unicode编码,因为Windows使用两种字 符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双 字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符 。 Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方 式。 如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE 方式,则编译器会把"Hello"字符串以UNICODE方式保存。 _T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存 這邊這個方法裡的註解 有中文比較好看的懂 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { // DPI scaler.Update(this); HDC hdc = GetDC()->m_hDC; UINT dpiy = GetDeviceCaps(hdc, LOGPIXELSY); // 用來建造control的temp Rect CRect tmprc(0, 0, 0, 0); // Load PCMan Icon icon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); SetIcon(icon, TRUE); SetIcon(icon, FALSE); CBitmap imglist_bmp; // Load Image List for Site List and Tab... imglist_bmp.Attach((HBITMAP)LoadImage(AfxGetInstanceHandle(), ConfigPath + ICON_BMP_FILENAME, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)); img_icons.Create(16, 16, ILC_COLOR32 | ILC_MASK, 9, 0); ImageList_AddMasked(img_icons.m_hImageList, (HBITMAP)imglist_bmp.m_hObject, RGB(255, 0, 255)); // Create font for UI LOGFONT lf; ...... 建立新連線的時候 開新頁籤 會執行 void CMainFrame::UpdateUI() 找到一個可以中斷點停住的地方 MainFrm.cpp的確是一個很好的開始點 有很多看起來跟操作直接相關的程式碼 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.213.138 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/PCman/M.1594563527.A.6DC.html ※ 編輯: name2name2 (114.136.213.138 臺灣), 07/12/2020 22:29:12