一、杂记
1、自动显示窗口的标识符:WS_VISIBLE。若无此标识符,则需用ShowWindow()手动显示所创的窗口。
2、UpdateWindow()产生一个WM_PAINT消息。
3、消息处理函数WinProc()中的参数hwnd只有当使用同一个窗口类创建的多个窗口时才起作用,此时,它表明消息来自哪个窗口。
4、WM_DESTROY在关闭窗口时产生,此消息并不终止应用程序,仅仅关闭窗口。在此之前产生一个WM_CLOSE的消息。
5、每处理一个消息后,用return (0);来退出WinProc(),且通知系统已经处理了该消息。
6、所有向WinProc()传递的参数都包含在MSG结构体中,且该结构体可在消息循环中由GetMessage()或PeekMessage()捕获。
7、<windowsx.h>包含一些有用的宏以及常量。WIN32_LEAN_AND_MEAN宏提示系统不要包含MFC的有关东西。
8、将字符串作为资源加载时,每行长度不能超过255个字符(包括常量本身在内)。
9、除了转义序列“ ”等不能放到字符串表单里,其他字符均可以,例如:%d、八进制码序“ 15”等。
10、int LoadString()加载字符串资源,返回加载的字符串长度。
11、鼠标位置是相对于客户区而言的,不包括边界以及控件,鼠标传递的是相对于左上角(0,0)的坐标;鼠标按键编码(以MK_开头)在WM_MOUSEMOVE中处理。
12、自行发送消息的函数:
LRESULT SendMessage():向窗口传递一个要求立即处理的消息,在接收窗口处理完该消息后紧跟接收窗口的WinProc()函数返回,且返回值为WinProc()的返回值;
BOOL PostMessage():向消息队列里顺序插入一个消息,当轮到该消息时才执行,也就是说该函数传递的消息处理时有延迟,如果不在意这种短暂的延迟,则可以使用该函数传递消息,同时,该函数也不容易出现消息乱序。
13、使用GetStockObject()或Create**()创建画笔、画刷、字体对象后,当不在使用他们时,应该使用DeleteObject()释放。
14、使用COLORREF SetPixel()绘制像素点,返回当前设置的像素颜色。
15、使用GetWindowDC()与GetDC()的区别:
GetWindowDC获取的设备描述表不仅可以在客户区内绘图,还可以在控件区域内绘图;而使用GetDC()获取的设备描述表就只能在客户区内绘制。
16、绘制线条时,使用MoveToEX()设置起点,使用LineTo()设置终点并绘制,上一次绘制的终点自动成为下一次绘制的起点。
17、传递给Rectangle()函数的坐标是矩形的外边框,如果线性为NULL,则得到的矩形在四个方向上各短了一个像素,该函数使用当前画笔和画刷绘制。FillRect()不使用边界画笔而绘制一个实心填充的矩形,包括左上角但不包括右下角,也就是说,若要填充(10,10)(30,30)区域,需要将坐标设置为(10,10)(31,31)。FrameRect()画出矩形边框。
18、画刷和画笔可以同时各选一支,且每中只能选一支。
二、对话框
2.1、分类:
根据对话框与其父窗口的关系,将对话框分为模态对话框和非模态对话框。模态对话框“令其父窗口无效,直到对话框结束”;非模态对话框“父窗口与对话框共同运行”,一般比较常用的是模态对话框。
例如MessageBox就是模态对话框。
2.2、创建一个对话框(以模态对话框为例)
......持续更新......