lz 妳好
在WM_COMMAND消息中 , lParam參數沒有高地位的值之分 . 如果這個消息是由壹個窗口發送的 , 那麽這個參數lParam就表示這個窗口的窗口句柄HWND,這個主要是為了區分消息是從哪個按鈕(或其它窗口控件)發送來的
我給妳舉個例子,妳就清晰了:(我上傳完整的源代碼)
//button.c#include<windows.h>
//按鈕個數
#define?NUM 2
//按鈕的文本
TCHAR*?btnName[NUM]={TEXT("按鈕1"),?TEXT("按鈕2")};
LRESULT?CALLBACK?WndProc(HWND,?UINT,?WPARAM,?LPARAM);
int?WINAPI?WinMain(HINSTANCE?hInstance,
HINSTANCE?hPrevInstance,
PSTR?szCmdLine,
int?iCmdShow)
{
static TCHAR szAppName[]?=?TEXT("Btn");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
int cxScreen,?cyScreen;
wndclass.style =?CS_HREDRAW?|?CS_VREDRAW;
wndclass.lpfnWndProc =?WndProc;
wndclass.cbClsExtra =?0;
wndclass.cbWndExtra =?0;
wndclass.hInstance =?hInstance;
wndclass.hIcon =?LoadIcon(NULL,?IDI_APPLICATION);
wndclass.hCursor =?LoadCursor(NULL,?IDC_ARROW);
wndclass.hbrBackground =?(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName =?NULL;
wndclass.lpszClassName =?szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,?TEXT("This?program?requires?Windows?NT!"),
szAppName,?MB_ICONERROR);
return?0;
}
cxScreen?=?GetSystemMetrics(SM_CXSCREEN);
cyScreen?=?GetSystemMetrics(SM_CYSCREEN);
hwnd?=?CreateWindow(szAppName,
TEXT("Btn?Demo"),
WS_OVERLAPPEDWINDOW,
cxScreen?*?3?/?10,
cyScreen?/?5,
cxScreen?*?2?/?5,
cyScreen?*?3?/?5,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,?iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,?NULL,?0,?0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return?msg.wParam;
}
LRESULT?CALLBACK?WndProc(HWND?hwnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
{
static?HWND hwndBtn[NUM];//按鈕句柄
HINSTANCE hInstance; //窗口實例
int cxChar,?cyChar,?i;//默認字體的寬度和高度?循環變量
switch(message)
{
case?WM_CREATE:
cxChar?=?LOWORD(GetDialogBaseUnits());
cyChar?=?HIWORD(GetDialogBaseUnits());
hInstance?=?((LPCREATESTRUCT)lParam)->hInstance;
//創建兩個按鈕
for(i=0;?i<NUM;?i++)
hwndBtn[i]?=?CreateWindow(TEXT("button"),?btnName[i],
WS_CHILD?|?WS_VISIBLE?|?BS_DEFPUSHBUTTON,
10,?i?*?100?+?10,?20?*?cxChar,?7?*?cyChar?/?4,
hwnd,?(HMENU)9,?hInstance,?NULL);
? return?0;
case?WM_COMMAND:
//響應兩個按鈕的按下消息
for(i=0;?i<NUM;?i++)
//如果按鈕句柄匹配?就顯示相應信息
if((HWND)lParam?==?hwndBtn[i])
{
MessageBox(NULL,?btnName[i],?TEXT("提示"),?MB_OK);
break;
}
return?0;
case?WM_DESTROY:
PostQuitMessage(0);
return?0;
}
return?DefWindowProc(hwnd,?message,?wParam,?lParam);
}
運行結果:
按下按鈕1,就顯示"按鈕1"
按下按鈕2 , 就顯示"按鈕2"
其實對於以WM開頭的windows消息的應用妳都可以查詢msdn中相關的說明,應該是能看懂的
希望能幫助妳哈