消息類型
Windows程序中分爲很多消息,不同的消息可能屬於不同的類型
窗口消息 :與窗口相關的消息
命令消息:用於處理用戶請求,以WM_COMMAND表示的消息
控件通知消息:統一由WM_NOTIFT表示
用戶自定義消息。可以傳遞更復雜的消息
postmessage和sendmessage的區別
sendmessage 和postmessage都是把消息放到消息隊列
sendmessage是阻塞的, 會等發送這個消息處理完成才返回
postmessage是非阻塞的,只管把消息發送出去,處不處理都返回
菜單
使用資源視圖增加菜單
菜單名相當於id號,選中菜單名點擊屬性可以修改id名稱
修改每一個菜單名的ID
在函數MyRegisterClass()中修改
wcex.lpszMenuName = MAKEINTRESOURCEW(IDR_MYMENU);//更換菜單ID,替換成菜單的ID
增加關閉和移動效果
在函數WndProc(HWND, UINT, WPARAM, LPARAM)的swicth case中在增加
case ID_CloseWnd: //ID名 PostQuitMessage(0); break; case ID_MoveWnd: MoveWindow(hWnd, 1122, 109, 100, 100, TRUE);//移動到1122,109,大小變爲100x100,重繪 break;
使用代碼創建菜單
在InitInstance(HINSTANCE, int)中
HMENU hMenu = CreateMenu();//菜單句柄 HMENU hPopMenu = CreatePopupMenu();//創建出一個彈出菜單 AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hPopMenu, L"test"); AppendMenu(hPopMenu, MF_STRING, /*id號*/2525, L"彈出個對話框"); HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, hMenu, hInstance, nullptr);
在函數MyRegisterClass()中修改
wcex.lpszMenuName =NULL;
控件
window程序中,一個控件就相當於是一個Window所以可以通過創建窗口的形式創建控件。
常用控件:
按鈕、文本框、下拉列表、列表框等
創建控件
在函數: InitInstance(HINSTANCE, int)裏創建
//window標準控件其實也是一個窗口 //創建按鈕 HWND hBtn = CreateWindow(_T("Button"), _T("點我"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 100, 100, 100, 50, hWnd,/*id號*/(HMENU)1024, hInstance, NULL); // 可見,子窗口,按鈕類型 //創建文本框 HWND g_hEdit g_hEdit = CreateWindow(_T("Edit"), _T("我是一個文本框"), WS_CHILD | WS_VISIBLE | ES_MULTILINE|ES_READONLY, 100, 200, 300, 30, hWnd, (HMENU)111, hInstance, NULL);
增加事件
在函數WndProc(HWND, UINT, WPARAM, LPARAM)的swicth case中在增加
case 2525: MessageBox(NULL, L"彈出了個對話框",L"aaa",MB_OK); break; case 1024: //MessageBox(NULL, L"點擊了BUTTON", L"aaa", MB_OK); SetWindowText(g_hEdit, L"aaaa "); SetWindowText(hWnd, L"我的窗口"); WCHAR sz[100]; GetWindowText(g_hEdit, sz, 99); break;
修改顏色創建畫刷
在函數: MyRegisterClass()中修改
在窗口中增加文字HBRUSH BRU = CreateSolidBrush(RGB(0, 255, 0)); wcex.hbrBackground = BRU;
TextOut(hdc, 152, 203, L"+", 1);