作者name2name2 (yang~hi)
看板PCman
標題[心得] PCman 程式探索 隨筆
時間Sun Jul 12 22:18:33 2020
這段時間把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://webptt.com/m.aspx?n=bbs/PCman/M.1594563527.A.6DC.html
※ 編輯: name2name2 (114.136.213.138 臺灣), 07/12/2020 22:29:12