作者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/cn.aspx?n=bbs/PCman/M.1594563527.A.6DC.html
※ 编辑: name2name2 (114.136.213.138 台湾), 07/12/2020 22:29:12