Windows窗口的创建

创建一个完整的窗口需要经过下面四个操作步骤:

1.  设计一个窗口类;

2.  注册窗口类;

3. 创建窗口;

4. 显示及更新窗口;


注册类:

typedef struct _WNDCLASS {
  UINT style;			// 窗口的风格
  WNDPROC lpfnWndProc;		// 窗口过程指针
  int cbClsExtra;		// 类额外附加参数
  int cbWndExtra;		// 窗口额外附加参数
  HANDLE hInstance;		// 当前应用程序实例句柄
  HICON hIcon;			// 程序图标句柄
  HCURSOR hCursor;		// 程序光标句柄
  HBRUSH hbrBackground;		// 程序背景刷子
  LPCTSTR lpszMenuName;		// 程序菜单名字
  LPCTSTR lpszClassName;	// 类名
} WNDCLASS;

加载图标函数:

HICON WINAPI LoadIcon(
  _In_opt_  HINSTANCE hInstance,// 应用程序实例句柄, 用标准图标(系统图标的时候此参数为NULL),下面的参数可以用系统的宏定义.
  _In_      LPCTSTR lpIconName
);

加载光标函数:

HCURSOR WINAPI LoadCursor(
  _In_opt_  HINSTANCE hInstance, // 应用程序实例句柄, 用标准光标(系统光标的时候此参数为NULL),下面的参数可以用系统的宏定义.
  _In_      LPCTSTR lpCursorName
);

获取一个预定义的对象(画笔, 刷子, 字体)函数: 

HGDIOBJ GetStockObject(
  int fnObject		// 预定的一些对象(参照MSDN)
);

注册窗口类函数:

ATOM RegisterClass(
  const WNDCLASS* lpWndClass	// 已填写的窗口类指针
);

创建窗口的函数:(该函数会返回一个窗口句柄)

HWND CreateWindow( 
  LPCTSTR lpClassName, 	// 窗口类名(必须是已经注册的窗口类)
  LPCTSTR lpWindowName, // 应用程序标题字符串
  DWORD dwStyle, 	// 窗口类型(详情参照MSDN) 
  int x, 		// 窗口的垂直坐标(CW_USEDEFAULT 为系统默认)
  int y, 		// 窗口的水平坐标
  int nWidth, 		// 窗口的宽度
  int nHeight, 		// 窗口的高度
  HWND hWndParent, 	// 创建窗口的父类句柄
  HMENU hMenu, 		// 菜单
  HANDLE hInstance, 	// 应用程序实例句柄
  PVOID lpParam 	// 附加参数
);

显示窗口函数:

BOOL WINAPI ShowWindow(
  _In_  HWND hWnd,	// 窗口的句柄
  _In_  int nCmdShow	// 显示的方式(参见MSDN)
);

更新窗口函数:

BOOL UpdateWindow( 
  HWND hWnd		// 要更新的窗口句柄
);

消息结构体:

typedef struct tagMSG { 
  HWND hwnd; 		//窗口句柄
  UINT message; 	//消息码
  WPARAM wParam; 	//高字节附加信息
  LPARAM lParam; 	//低字节附加信息
  DWORD time; 		//消息的时间
  POINT pt; 		//鼠标的位置
} MSG;

获取消息函数:
BOOL GetMessage(
  LPMSG lpMsg, 		// 消息结构体的指针
  HWND hWnd, 		// 想获取哪个窗口的句柄, NULL为想获取所有的消息
  UINT wMsgFilterMin, 	// 设定消息范围的最小值.(都设为0为没有限制) 
  UINT wMsgFilterMax 	// 设定消息范围的最大值
      );


转换消息函数: TranslateMessage(&msg);  // 例如按键的虚拟消息转换码

消息派发函数:DispatchMessage(&msg);    // 将消息发送出去,;


窗口过程函数:

LRESULT CALLBACK WindowProc(
  HWND hwnd, 		// 窗口句柄
  UINT uMsg, 		// 消息码
  WPARAM wParam, 	// 高字节附加信息
  LPARAM lParam 	// 低字节附加信息
);

消息框函数:
int MessageBox(
  HWND hWnd, 		// 窗口句柄
  LPCTSTR lpText, 	// 要显示的文本
  LPCTSTR lpCaption, 	// 消息框的标题
  UINT uType		// 显示的方式(详见MSDN)
);

在WM_PINT消息之外处理绘图事件时需要调用GetDC 和ReleaseDC 这两个函数, 在这两个函数之间处理绘图消息

HDC GetDC( 
  HWND hWnd		// 窗口句柄
);
int ReleaseDC( 
  HWND hWnd, 		// 窗口句柄
  HDC hDC		// 绘图设备句柄
);

 

在WM_PAINT消息内处理绘图事件时需要在BeginPaint 和 EndPaint() 这两个函数之间处理绘图消息

HDC BeginPaint( 
  HWND hwnd,		// 窗口句柄
  LPPAINTSTRUCT lpPaint	// (内部维护的一个PAINTSTRUST) 传入一个PAINTSTRINT 结构体的指针
);
BOOL EndPaint( 
  HWND hWnd, 			// 窗口句柄
  CONST PAINTSTRUCT* lpPaint 	PAINTSTRUST 结构体指针
);

销毁窗口函数:
BOOL DestroyWindow( 
  HWND hWnd 	// 窗口句柄
);
退出消息循环函数:
void PostQuitMessage(
  int nExitCode 	//退出码
);
缺省窗口过程函数::
LRESULT WINAPI DefWindowProc(
  _In_  HWND hWnd,		// 窗口句柄
  _In_  UINT Msg,		// 消息码
  _In_  WPARAM wParam,		// 高字节附加参数
  _In_  LPARAM lParam		// 低字节附加参数
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值