nfy123 发表于 2014-2-10 21:47:39

为什么不显示窗口

#include <windows.h>


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
ATOM                                MyRegisterClass(HINSTANCE hInstance);


int WINAPI WinMain(HINSTANCE hInstance,
                                   HINSTANCE hPrevInstance,
                                   LPSTR lpszCmdLine,
                                   int nCmdShow)
{
        HWND hwnd;//窗口句柄
        MSG msg;//消息
MyRegisterClass(hInstance);


        //3.创建窗口
        hwnd = CreateWindow(
                TEXT("MyWndClass"),
                TEXT("Hello SDK Application"),
                WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                NULL,//父窗口句柄
                NULL,//窗口菜单句柄
                hInstance,
                NULL);

        //4.显示和更新窗口
        ShowWindow(hwnd,nCmdShow);
        UpdateWindow(hwnd);
        //5.消息循环
        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;//DC句柄
        RECT rect;

        //对各种消息进行处理
        switch(message)
        {
        case WM_SIZE:
                //重画 Paint
                return 0;
        case WM_LBUTTONDOWN:
                //MessageBox(hwnd,TEXT("Mouse Clicked!"),TEXT("消息"),MB_OK);
                //PostQuitMessage(0);
                return 0;
        case WM_PAINT: //绘制消息
                hdc = BeginPaint(hwnd,&ps);
                GetClientRect(hwnd,&rect);
                //Ellipse(hdc,0,0,200,100);
                DrawText(hdc,TEXT("Hello, Windows!"),-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);
}
ATOM                                MyRegisterClass(HINSTANCE hInstance)
{


    WNDCLASSEX wc;

        wc.cbSize = sizeof(WNDCLASSEX);

        wc.style = 0;
        wc.lpfnWndProc = (WNDPROC)WndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;
        wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
        wc.hCursor = LoadCursor(NULL,IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszMenuName = NULL;
        wc.lpszClassName = TEXT("MyWndClass");

       RegisterClassEx(&wc);

}
本意是想把原来程序中的注册窗口类写到主函数之外,在VC6.0与vs2008中编译成功,连接成功,就是不显示窗口,求解

nfy123 发表于 2014-2-11 23:34:39

自已顶一下,等朋友赐教

未闻丶花名 发表于 2014-2-12 01:09:25

谢谢分享!!!!

nfy123 发表于 2014-2-14 13:32:33

有朋自远方来。请赐教,

xhbuming 发表于 2014-2-14 19:29:03

WNDCLASSEX wc; RegisterClassEx(&wc);
上面两个吧Ex去掉试试

nfy123 发表于 2014-2-15 00:06:33

窗口已显示。谢xhbuming帮助。

nfy123 发表于 2014-2-15 00:11:46

为什么会这样?写到WinMain()外,必须去掉EX。才能显示窗口。写到WinMain()里面,不去掉EX就能显示窗口
页: [1]
查看完整版本: 为什么不显示窗口