WIN32 SDK 创建窗口实例

来源:互联网 发布:必佳预算软件 编辑:程序博客网 时间:2024/06/05 14:11

在Windows平台做开发都需要了解WIN32的应用程序运行机理,最近也正在学习使用MFC。所以用WIN32 SDK写了一个绘制窗口的简单程序。程序虽然没有什么功能,但是已经展示了WIN32应用程序机理的基本。

 

#include <windows.h>
#include <stdio.h>

 

LRESULT CALLBACK WinProc(
  HWND hwnd,     
  UINT message,    
  WPARAM wParam, 
  LPARAM lParam 
);

 

int WINAPI WinMain(
  HINSTANCE hInstance,      // 应用程序当前实例句柄
  HINSTANCE hPrevInstance,  // 应用程序其他实例句柄
  LPSTR lpCmdLine,          // 指向程序命令行参数的指针
  int nCmdShow)              // 应用程序开始执行时窗口显示方式的整数值标识
{
    WNDCLASS wd;
    wd.cbClsExtra=0;//窗口类无扩展
    wd.cbWndExtra=0;//窗口实例无扩展
    wd.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//窗口背景为黑色
    wd.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标
    wd.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为默认图标
    wd.hInstance=hInstance;//当前实例句柄
    wd.lpfnWndProc=WinProc;//定义窗口处理函数
    wd.lpszClassName="自定义窗口";//定义窗口类名称
    wd.lpszMenuName=NULL;//窗口中无菜单
    wd.style=CS_HREDRAW | CS_VREDRAW;//定义窗口类型为当窗口大小变化时窗口重画

    RegisterClass(&wd);//注册窗口类

    //创建窗口
    HWND hwnd;
    hwnd=CreateWindow("自定义窗口","WIN32 SDK 创建窗口实例",WS_OVERLAPPEDWINDOW,
        0,0,800,500,NULL,NULL,hInstance,NULL);

    //显示窗口
    ShowWindow(hwnd,SW_SHOWNORMAL);

    //更新窗口
    UpdateWindow(hwnd);

    //消息循环
    MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

 

//窗口函数
LRESULT CALLBACK WinProc(
  HWND hwnd,      // handle to window
  UINT message,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
    switch(message)
    {
    case WM_LBUTTONDOWN:
        MessageBox(hwnd,"blog.csdn.net/ducongcong!","WIN32SDK",0);
        break;
    case WM_CLOSE:
        if(MessageBox(hwnd,"关闭窗口吗?","WIN32SDK",MB_YESNO)==IDYES)
        {
             DestroyWindow(hwnd);
        }

        break;
    case WM_DESTROY:
          PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd,message,wParam,lParam);
    }
    return 0;
}