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申請,防止全局變量被包含多次
 

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