手动创建窗口程序

来源:互联网 发布:js自定义组件 编辑:程序博客网 时间:2024/06/10 20:19

     以前都是用mfc直接生成窗口,最近在学习Directx是资料上手动创建一个窗口,自己便试着去手动创建一个窗口,程序写好了开始编译,没有报错能够,但是窗口不能显示,通过不断地观察和测试,最后发现原来是消息过程函数没有DefWindowProc这个函数,添加这后运行成功。代码如下,共大家参考:

 

 

#include "windows.h"

#pragma comment(lib, "User32.lib")


#define  CLASSNAME "UserWindow"
#define  WINDOWNAME "TestWindow"

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,
       WPARAM wParam,LPARAM lParam);
       
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, int nCmdShow )
{
 WNDCLASSEX WndClass;

 WndClass.cbSize = sizeof(WNDCLASSEX);
 WndClass.cbClsExtra = NULL;
 WndClass.cbWndExtra = NULL;
 WndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
 WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
 WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 WndClass.hInstance = hInstance;
 WndClass.lpfnWndProc = WindowProc;
 WndClass.lpszClassName = "UserWindow";
 WndClass.lpszMenuName = NULL;
 WndClass.style = CS_HREDRAW | CS_VREDRAW;
 WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

 if (!RegisterClassEx(&WndClass))
 {
  return NULL;
 }

 HWND hWnd;

    hWnd = CreateWindowEx(NULL, WndClass.lpszClassName, "TestWindow", WS_VISIBLE | WS_SYSMENU, 100, 100, 400, 300, NULL,
                  NULL, hInstance, NULL);
 if (NULL == hWnd)
 {
  return NULL;
 }

 ShowWindow(hWnd, SW_SHOWNORMAL);

 UpdateWindow(hWnd);

 MSG msg;

 while (GetMessage(&msg, NULL, NULL, NULL))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 
 return msg.wParam;

}
      
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
 switch (uMsg)
 {
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 default:
  break;
 }

 return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

原创粉丝点击