竹叶风轻敲 2024-07-18 18:12 采纳率: 50%
浏览 6

peekmessage检测不到鼠标左键单击,控制台无法输出想要的字符串

img


peekmessage检测不到鼠标左键单击,控制台无法输出想要的字符串,

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-18 18:13
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    从你提供的图片内容来看,代码中存在一些明显的错误和可能的问题。以下是一些可能的原因和建议:

    1. 函数名错误

      • 函数名 peekmessage 应该是 PeekMessage(注意大小写)。
    2. 消息处理逻辑

      • 消息处理逻辑中,WM_LBUTTONDOWN 应该与 msg.message 进行比较,而不是 msg.message WM LBUTTONDOWN
    3. 字符串输出

      • Printf 应该是 printf(注意大小写)。
      • 字符串输出的格式可能不正确,例如 "C heoolm" 应该是 "Hello World"
    4. 变量名和表达式

      • 变量名 sg 应该是 msg
      • 表达式 100 && msg.x 应该是 100 && (msg.x + 100)
    5. 鼠标移动和释放事件处理

      • WM_MOUSEMOVEWM_LBUTTONUP 的处理逻辑似乎不完整或不正确。
    6. 未处理的事件

      • 代码中没有处理 else 语句,可能需要添加对其他消息的处理。

    以下是修正后的代码示例:

    #include <windows.h>
    #include <stdio.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        static char szAppName[] = "HelloWin";
        WNDCLASS wndclass;
    
        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, "This program requires Windows NT!", "ERROR", MB_ICONERROR);
            return 0;
        }
    
        HWND hwnd = CreateWindow(szAppName,
                                "The Hello Program",
                                WS_OVERLAPPEDWINDOW,
                                100,
                                100,
                                500,
                                500,
                                NULL,
                                NULL,
                                hInstance,
                                NULL);
    
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    
        MSG msg;
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        PAINTSTRUCT ps;
        HDC hdc;
    
        switch (message)
        {
        case WM_CREATE:
            break;
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            TextOut(hdc, 20, 20, "Hello, Windows!", 14);
            EndPaint(hwnd, &ps);
            break;
        case WM_LBUTTONDOWN:
            printf("Hello World\n");
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
        }
        return 0;
    }
    

    这段代码创建了一个基本的窗口,并在鼠标左键单击时输出 "Hello, Windows!"。你可以参考这段代码来修改你的程序,确保 PeekMessage 和消息处理逻辑正确。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月18日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22