关于windows的消息响应机制一直不是很明白。比如我用如下代码做了一个窗口,包含一个按钮,一个静态文本框。现在我想实现点击按钮的时候,静态文本框中的文本内容显示一个随机数字,应该怎么写?请高手指点!
#include<windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void OutputErrorMessage()
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR)&lpMsgBuf,
0,
NULL
);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONINFORMATION);
LocalFree(lpMsgBuf);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
WNDCLASS wMain;
HWND hwnd;
MSG msg;
static TCHAR szAppName[] = TEXT("test");
wMain.lpfnWndProc = WndProc;
wMain.style = CS_HREDRAW | CS_VREDRAW;
wMain.hInstance = hInstance;
wMain.cbClsExtra = 0;
wMain.cbWndExtra = 0;
wMain.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
wMain.hCursor = LoadCursor(NULL, IDC_ARROW);
wMain.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wMain.lpszClassName = szAppName;
wMain.lpszMenuName = NULL;
if (!RegisterClass(&wMain))
{
OutputErrorMessage();
MessageBox(NULL, TEXT("无法注册窗口类!"), TEXT("错误"), MB_OK | MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName, TEXT("test"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
if (ShowWindow(hwnd, iCmdShow))
{
OutputErrorMessage();
}
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 hwndButton;
static HWND hwndStatic;
switch (message)
{
case WM_CREATE:
hwndButton = CreateWindow(TEXT("BUTTON"), TEXT("test"),
WS_CHILD | WS_VISIBLE | BS_CENTER,
100, 400, 80, 50,
hwnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
hwndStatic = CreateWindow(TEXT("static"), NULL,
WS_CHILD | WS_VISIBLE | ES_LEFT | SS_NOTIFY | SS_CENTER | WS_BORDER,
100, 50, 100, 100,
hwnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
return 0;
case WM_COMMAND:
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}