seeyou_shj 2021-02-02 10:58 采纳率: 100%
浏览 19
已采纳

关于windows的消息响应机制,请高手指点

关于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);
}
 

  • 写回答

1条回答 默认 最新

  • peng450 2021-02-02 15:16
    关注

    你可以了解下sendmsg 和 postmsg这两个函数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程