Windows编程学习中..

1, 得到HINSTANCE程序句柄
在WM_CREATE时,lParam是指向CREATESTRUCT结构的指针.
HINSTANCE instance = ((LPCREATESTRUCT)lParam)->hInstance;
HINSTANCE instance = GetWindowLong(hwnd, GWL_HINSTANCE);

2, 得到子窗口ID/HWND
int childID = GetWindowLong(childHwnd, GWL_ID);
int childID = GetDlgCtrlID(childHwnd);
HWND childHwnd = GetDlgItem(ParentHwnd, ID);

3, 按钮样式BS_ICON, BS_BITMAP, 设定位图消息BM_SETIMAGE

4, WM_VSCROLL/WM_HSCROLL消息 子控件滚动条lParam为0, 滚动条控件为句柄

5, 窗口子类化
WNDPROC oldProc = (WNDPROC)SetWindowLong(vscrollHwnd, GWL_WNDPROC, (long)ScrollProc);
LRESULT CALLBACK ScrollProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
       //..
       return CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
}

6, 数据强制转换
#define MAKEINTRESOURCE( i)  (LPTSTR) ((DWORD) ((WORD) ( i)))
(char *)((unsigned long)((unsigned short)(i)));
unsigned short是去掉最高位,只要低位2字节
unsigned long转回占4字节
(char *)(3) == 00000000 00000011;

7, 在现代汉语中,许多词的重点都在后面
数组指针   后面为指针, 即int (*p)[3]
指针数组   后面为数组, 即int *p[3];
函数指针   后面为指针, 即int (*swap)(int)
指针函数   后在为函数, 即int *swap(int a)
8, 数组做函数参数时, 失去数组属性, 成为指针.
void sw(int a[3])
{
   a++;
   sizeof(a) == 4;
}

9, 二进制数对应位最大数值
 8位   256   byte
10位  1024   byte/1kb
16位 65536   byte/64kb
20位     1     MB
30位     1      G
32位     4      G

10, 创建窗口菜单三种方法, 1,窗口类别中指定; 2,在CreateWindow()第九个参数指定; 3,创建窗口后,用SetMenu(HWND, HMENU)函数指定 (这种与窗口无关的创建方法,程序结束时应该用DestroyMenu()清除

11, SetWindowLong()/GetWindowLong()
GWL_EXSTYLE 设置窗口的扩展风格.
GWL_STYLE 设置新的窗口风格
GWL_WNDPROC 设置新的窗口处理函数地址
GWL_HINSTANCE 设置新的应用程序句柄
GWL_ID 设置新的窗口标识
GWL_USERDATA 设置一个与这个窗口相关的给用户使用的32位的数据

12, 对话框程序,如果WM_INITDIALOG消息函数返回是true则按WS_TABSTOP第一个控件得到焦点.
如果WM_INITDIALOG消息函数返回是false,如果设置了某控件得到focus,则某控件得到第一个焦点.如果没有设置,则和true结果一样,WS_TABSTOP第一个控件得到焦点.

13, 静态类成员变量, 必须在类外赋初值/申明

14, 全局变量必须在.cpp里申明.不能放在.h申请,防止全局变量被包含多次
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章