CSDN-Ada助手 2024-02-19 12:18 采纳率: 1.5%
浏览 26

请教,下面的代码怎么运行后,不显示窗口?_(语言-c语言|操作系统-windows)

该问题来自社区帖: https://bbs.csdn.net/topics/618092933.为符合问答规范, 该问题经过ChatGPT优化
<html></html>

请问以下的代码,编译、调试都通过后,为什么执行时,看不到窗口?

代码如下:

        #include "stdafx.h"
        #include <windows.h>
        #include "mmsystem.h"

        LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

        int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow)
        {
            static TCHAR szAppName[] = TEXT("我的窗口");
            HWND hwnd;
            MSG msg;
            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;
            hwnd = CreateWindow(szAppName, TEXT("我的窗口"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 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)
        {
            HDC hdc;
            PAINTSTRUCT ps;
            RECT rect;
            switch (message)
            {
            case WM_CREATE:
                PlaySound(TEXT("Welcom98.wav"), NULL, SND_FILENAME | SND_ASYNC);
                return 0;
            case WM_PAINT:
                hdc = BeginPaint(hwnd, &ps);
                GetClientRect(hwnd, &rect);
                DrawText(hdc, TEXT("hello, windows98"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
                EndPaint(hwnd, &ps);
                return 0;
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            }
            return DefWindowProc(hwnd, message, wParam, lParam);
        }
    
  • 写回答

2条回答 默认 最新

  • 哎呀呀不会啊 2024-02-19 14:27
    关注
    1. 比如CW_USEDEFAULT替换为具体的像素值,例如500和300,以查看是否窗口被创建在可见的位置。
    2. 使用了ShowWindow和UpdateWindow来显示和更新窗口,但是如果你在创建窗口后立即返回或者执行了其他操作,可能会导致窗口没有立即显示。你可以尝试在创建窗口后添加一些延迟,比如使用Sleep函数,看看是否能够看到窗口。
    评论

报告相同问题?

问题事件

  • 创建了问题 2月19日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用