// Myday03.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "Myday03.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance ,
LPSTR lpCmdLine ,
int nCmdShow )
{
LPCTSTR myLpszClassName = (LPCWSTR )_T("MainWin");
LPCTSTR myWndTitle = (LPCWSTR )_T("我的第一个窗口");
/*
typedef struct _WNDCLASS {
UINT style;// 窗口类型
WNDPROC lpfnWndProc;//窗口处理函数
int cbClsExtra;//窗口扩展
int cbWndExtra;//窗口实例扩展
HINSTANCE hInstance;//实例句柄
HICON hIcon;//窗口的最小化图标
HCURSOR hCursor;//窗口鼠标光标
HBRUSH hbrBackground;//窗口背景色
LPCTSTR lpszMenuName;//窗口菜单
LPCTSTR lpszClassName;// 窗口类名
} WNDCLASS, *LPWNDCLASS;
typedef struct WNDCLASSEX {
UINT cbSize; //WNDCLASSEX 的大小。我们可以用sizeof(WNDCLASSEX)来获得准确的值。
UINT style; //从这个窗口类派生的窗口具有的风格。您可以用“or”操作符来把几个风格或到一起。
WNDPROC lpfnWndProc;//窗口处理函数的指针。
int cbClsExtra; //指定紧跟在窗口类结构后的附加字节数。
int cbWndExtra; //指定紧跟在窗口实例的附加字节数。如果一个应用程序在资源中用CLASS伪指令注册一个对话框类时,则必须把这个成员设成DLGWINDOWEXTRA。
HINSTANCE hInstance; //本模块的实例句柄。
HICON hIcon; //图标的句柄。
HCURSOR hCursor; //光标的句柄。
HBRUSH hbrBackground; //背景画刷的句柄。
LPCTSTR lpszMenuName; //指向菜单的指针。
LPCTSTR lpszClassName; //指向类名称的指针。
HICON hIconSm; //和窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标。
} WNDCLASSEX, *PWNDCLASSEX;
*/
WNDCLASSEX wce{};//增强版WNDCLASS
wce.cbSize = sizeof(wce);
wce.style = CS_HREDRAW | CS_VREDRAW ;
/*
DefWindowProc 这个函数是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理。
这个函数在处理关闭窗口消息WM_CLOSE时,是调用DestroyWindow函数关闭窗口并且发WM_DESTROY消息给应用程序;而它对WM_DESTROY这个消息是不处理的(考虑为什么?);
我们在应用程序中对这个消息的处理是发出WM_QUIT消息。因此WM_CLOSE、WM_DESTROY、WM_QUIT这三个消息是先后产生的。
hWnd:指向接收消息的窗口过程的句柄。
Msg:指定消息类型。
wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
返回值:返回值就是消息处理结果,它与发送的消息有关。
DefWindowProc // 默认的窗口消息处理程序
*/
//wce.lpfnWndProc = hInstance;
wce.lpfnWndProc = DefWindowProc;
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hInstance = hInstance;
wce.hIcon = NULL;
wce.hCursor = NULL;
wce.hbrBackground = GetSysColorBrush( COLOR_3DFACE);
wce.lpszMenuName = NULL;
wce.lpszClassName = myLpszClassName;
wce.hIconSm = NULL;
ATOM nAtom = RegisterClassEx (&wce);
if (nAtom == 0){
MessageBox(NULL , _T("注册失败"), _T("错误信息" ), MB_OK);
return 0;
}
/*
WND CreateWindowEx(
_In_ DWORD DdwExStyle, //窗口的扩展风格
_In_opt LPCTSTR lpClassName, //指向注册类名的指针
_In_opt LPCTSTR lpWindowName, //指向窗口名称的指针
_In_ DWORD dwStyle, //窗口风格
_In_ int x, //窗口的水平位置
_In_ int y, //窗口的垂直位置
_In_ int nWidth, //窗口的宽度
_In_ int nHeight, //窗口的高度
_In_opt_ HWND hWndParent, //父窗口的句柄
_In_opt_ HMENU hMenu, //菜单的句柄或是子窗口的标识符
_In_opt_ HINSTANCE hInstance, //应用程序实例的句柄
_In_opt_ LPVOID lpParam //指向窗口的创建数据
);
*/
HWND mainHWnd = CreateWindowEx (WS_EX_ACCEPTFILES, myLpszClassName, myWndTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT , CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL , NULL, hInstance, NULL);
CreateWindowEx(WS_EX_ACCEPTFILES ,
myLpszClassName,
myWndTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
mainHWnd,
NULL,
hInstance,
NULL);
/*
该函数设置指定窗口的显示状态。
hWnd:指窗口句柄。
nCmdShow:指定窗口如何显示。
*/
ShowWindow(mainHWnd, SW_SHOW);
MSG nMsg {};
while (GetMessage (&nMsg, NULL, 0, 0))
{
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
return TRUE ;
}