一个模块化的Windows程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/active2489595970/article/details/84700920

新建一一个项目名为AdvWin的Win32应用程序空项目,然后为其添加一个名为AdvWin的C++源文件

#include<windows.h>

char Name[]="AdvWin";

LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam);
BOOL Register(HINSTANCE hInst);
HWND Create(HINSTANCE hInst,int nCmdShow);

//程序的入口WinMain()函数
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)
{
    MSG Msg;

    if(!Register(hInst))
        return FALSE;

    if(!Create(hInst,nCmdShow))
        return FALSE;

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

/*MSG结构体定义
typedef struct tagMSG{//msg
    HWND hwnd;//所属窗口句柄
    UINT message;//消息标识符
    WPARAM wParam;//消息附加信息
    LPARAM lParam;//消息附加信息
    DWORD time;//投递到消息队列时间
    POINT pt;//鼠标当前位置
}*/

//注册窗口函数
BOOL Register(HINSTANCE hInst)
{
    WNDCLASS WndClass;

    WndClass.style=CS_HREDRAW|CS_VREDRAW;//窗口样式
    WndClass.lpfnWndProc=WndProc;//窗口过程函数名
    WndClass.cbClsExtra=0;//窗口类相关的额外参数
    WndClass.cbWndExtra=0;//窗口实例相关的额外参数
    WndClass.hInstance=hInst;//应用程序句柄
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    WndClass.lpszMenuName=NULL;//窗口菜单名
    WndClass.lpszClassName=Name;//窗口类名

    return (RegisterClass(&WndClass)!=0);//如果该函数返回为0则代表注册失败,非0代表注册成功
}

/*WNDCLASS结构定义
typedef struce_WNDCLASS{
    UINT style;//窗口样式
    WNDPROC lpfnWndProc;//窗口过程函数名
    int cbClsExtra;//窗口类相关的额外参数
    int cbWndExtra;//窗口实例相关的额外参数
    HANDLE hInstance;//应用程序句柄
    HICON hIcon;//窗口图标
    HCURSOR hCursor;//窗口光标
    HBRUSH hbrBackground;//窗口颜色
    LPCTSTR lpszMenuName;//窗口菜单名
    LPCTSTR lpszClassName;//窗口类名
}WNDCLASS;*/


/*RegisterClass函数声明
ATOM RegisterClass(
  CONST WNDCLASS *lpWndClass;//窗口类地址
)*/

//创建并显示窗口函数
HWND Create(HINSTANCE hInst,int nCmdShow)
{
    HWND hwnd=CreateWindow(Name,Name,WS_OVERLAPPEDWINDOW,
        10,10,600,400,NULL,NULL,hInst,NULL);

    if(hwnd==NULL)
        return FALSE;

    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);

    return hwnd;
}

/*CreateWindow函数声明
HWND CreateWindow(
  LPCTSTR lpClassName,//注册窗口类名地址
  LPCTSTR lpWindowName,//窗口标题正文字符串地址
  DWORD dwStyle,//窗口样式
  int x,//窗口的水平位置
  int y,//窗口的垂直位置
  int nWidth,//窗口的宽度
  int nHeight,//窗口的高度
  HWND hWndParent,//父窗口的句柄
  WMENU hMenu,//菜单或子窗口ID的句柄
  HANDLE hInstance,//应用程序实例的句柄
  LPVOID lpParam//窗口创建数据地址
);*/

void my_OnDestroy(HWND hwnd);//消息响应函数声明

//窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
    switch(Message)
    {
    case WM_DESTROY:
            my_OnDestroy(hwnd);
            break;

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

//销毁窗口消息响应函数实现
void my_OnDestroy(HWND hwnd)
{
    PostQuitMessage(0);
}

猜你喜欢

转载自blog.csdn.net/active2489595970/article/details/84700920