WINDOWS窗口

typedef struct tagWNDCLASSEX
{
UINT cbSize;//每次都需要的结构体大小,就用sizeof(WNDCLASSEX)好了
UINT style;//窗口风格
WNDPROC lpfnWndProc;//窗口过程主函数地址
int cbClsExtra;// 窗口类的附加内存,可能是做子窗口的时候需要加,没有自窗口的话先设置为0
int cbWndExtra;//窗口的附加内存,还不知道加了要怎么用先设置为0;
HINSTANCE hInstance;//窗口句柄
HICON hIcon;//窗口图标句柄
HCURSOR hCursor;//窗口光标句柄
HBRUSH hbrBackground;//背景画刷句柄,也就是默认背景,用系统的设置就行
LPCTSTR lpszMenuName;//菜单资源名称?菜单的本地文件?
LPCTSTR lpszClassName;//窗口类名,我不知道为什么大多数教程喜欢给这个类名取中二病十足的名字
HICON hIconSm;//右下角隐藏窗口图标,设置如上述图标句柄,可以直接复用图标句柄
}WNDCLASSEX,*PWNDCLASSEX;

style常用如下:
CS_HREDRAW 横向变化重绘
CS_VREDRAW 纵向变化重绘
CS_NOCLOSE 禁用Close按钮
CS_DBLCLKS 双击发送双击事件

应用接收到消息时:
1.调用DispatchMessage(&msg)将消息传给操作系统
2.操作系统寻找应用的窗口过错主函数地址
3.系统把msg仍给主函数地址对于的函数,函数接收到消息

因此注册的时候,系统将会知道应用的主函数地址

typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM)
主函数应与上面的函数参数一致

hIcon一般使用LoadImage来调用
调用如下:
(HICON)::LoadImage(NULL, _T(“icon.ico”), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);

WINUSERAPI
HANDLE
WINAPI
LoadImageA(
In_opt HINSTANCE hInst,//设置为NULL
In LPCSTR name,//地址
In UINT type,//图片类型
In int cx,//x
In int cy,//y
In UINT fuLoad)//;图片加载方式
type如下:
#define IMAGE_BITMAP 0
#define IMAGE_ICON 1
#define IMAGE_CURSOR 2

fuLoad如下:
#define LR_DEFAULTCOLOR 0x00000000
#define LR_MONOCHROME 0x00000001
#define LR_COLOR 0x00000002
#define LR_COPYRETURNORG 0x00000004
#define LR_COPYDELETEORG 0x00000008
#define LR_LOADFROMFILE 0x00000010
#define LR_LOADTRANSPARENT 0x00000020
#define LR_DEFAULTSIZE 0x00000040
#define LR_VGACOLOR 0x00000080
#define LR_LOADMAP3DCOLORS 0x00001000
#define LR_CREATEDIBSECTION 0x00002000
#define LR_COPYFROMRESOURCE 0x00004000
#define LR_SHARED 0x00008000

hCursor一般使用LoadCursor来调用
调用示例如下:
wndclass.hCursor = LoadCursor(NULL, _T(“cursor.ico”));

WINUSERAPI
HCURSOR
WINAPI
LoadCursorA(
In_opt HINSTANCE hInstance,//同上设置为NULL的句柄
In LPCSTR lpCursorName);//光标图地址,如果想用默认就用宏IDC_ARROW;

画刷句柄常用如下函数获取
WINGDIAPI HGDIOBJ WINAPI GetStockObject( In int i);
示例如下:
wndclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);

GetStockObject下的子类应该是
GetStockBrush//画笔
GetStockFont//字体
GetStockPen//调色板

也就说设置这三个东西的时候,可以统一调用GetStockObject(In int i);
强转成各自

可在创建之前调用AdjustWindowRect设定尺寸和窗口风格
示例如下:
LPRECT lpRect = { 0,0,800,600 };
AdjustWindowRect(&lpRect, WS_OVERLAPPEDWINDOW, true);

猜你喜欢

转载自blog.csdn.net/liuyx91/article/details/90116718