首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法打开Win32 API窗口

无法打开Win32 API窗口
EN

Stack Overflow用户
提问于 2013-02-26 10:05:11
回答 3查看 1.2K关注 0票数 0

好了,我花了一些时间来学习Win32应用程序接口来打开窗口,我最后想出的代码我认为可以工作,但没有。我注册了窗口类,做了所有我必须做的事情,但当我运行它时,什么也没有发生……如果有人能指出我做错了什么/错过了什么,那将是一个很大的帮助。

代码语言:javascript
复制
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
#pragma comment (lib, "wsock32.lib")
#define WNDCLASSNAME "wndclass"

bool quit = false;

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
            break;

        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int nshowcmd)
{
    WNDCLASSEX WCE;
    WCE.cbSize = sizeof(WNDCLASSEX);
    WCE.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC|CS_DBLCLKS;
    WCE.lpfnWndProc = WndProc;
    WCE.cbClsExtra = 0;
    WCE.cbWndExtra = 0;
    WCE.hInstance = hinstance;
    WCE.hIcon = NULL;//LoadImage()
    WCE.hCursor = NULL;//LoadCursor(NULL, IDC_CROSS);
    WCE.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    WCE.lpszMenuName = NULL;
    WCE.lpszClassName = "KyleWindow";
    WCE.hIconSm = NULL;

    RegisterClassEx(&WCE);

    HWND WindowHandle;

    WindowHandle = CreateWindowEx(WS_OVERLAPPEDWINDOW, "KyleWindow", "Xerus", WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, hinstance, NULL);

    ShowWindow(WindowHandle, SW_SHOWNORMAL);
    UpdateWindow(WindowHandle);

    std::cout<<"'Opened' Window"<<std::endl;

    MSG msg;

    while(!quit)
    {
        if(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
        {
            if(msg.message == WM_QUIT)
                quit = true;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return msg.lParam;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-26 11:00:17

使用WS_EX_OVERLAPPEDWINDOW作为CreateWindowEx函数的第一个参数(而不是WS_OVERLAPPEDWINDOW,后者不是有效的扩展窗口样式)。

票数 3
EN

Stack Overflow用户

发布于 2013-07-26 16:44:16

使用WNDCLASS而不是WNDCLASSEX

更改:

WNDCLASSEX WCE;WNDCLASS WCE;

删除行:

代码语言:javascript
复制
WCE.cbSize = sizeof(WNDCLASSEX);

更改:

RegisterClassEx(&WCE);RegisterClass(&WCE);

票数 -1
EN

Stack Overflow用户

发布于 2013-05-09 09:28:10

函数int WINAPI WinMain必须在函数LRESULT回调WndProc之前。编译器按顺序读取。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15080129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档