1、设计窗口类
2、注册窗口
3、创建窗口
4、显示窗口与更新窗口
5、消息循环
6、窗口函数
1.设计窗口
typedef struct tagWNDCLASS {
UINT style; //窗口的样式
WNDPROC lpfnWndProc; //名回调函数的名字
int cbClsExtra; //窗口类无扩展
int cbWndExtra; //窗口实例无扩展
HINSTANCE hInstance; //当前实例句柄
HICON hIcon; //窗口的图标
HCURSOR hCursor; //光标的形状与类型
HBRUSH hbrBackground; //窗口的背景
LPCSTR lpszMenuName; //设定菜单
LPCSTR lpszClassName; //设定窗口名字(类名)
} WNDCLASS, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA;
注:以上是设计窗口的一个结构体 ,
作用是确定窗口的 。
图标、窗口样式、回调函数、背景、光标、类名等属性
2.注册窗口
RegisterClass(&XXX);
注:XXX代表 某某某设计窗口的结构体名+“&”是取地址
作用是导入内存
3.创建窗口
CreaeWindow 创建窗口函数原型
HWND CreateWindow(
LPCTSTR lpClassName, //窗口类名(与设计函数的类名相同)
LPCTSTR lpWindowName, //窗口标题
DWORD dwStyle, //窗口样式,多种样式
int x, //x坐标 (屏幕坐标)
int y, //Y坐标(屏幕坐标)
int nWidth, //宽
int nHeight, //高
HWND hWndParent, //父窗口
HMENU hMenu, //加载菜单的句柄
HANDLE hlnstance, //创建此窗口的应用程序的当前句柄(PID)(也是设计窗口中的.hInstance)
LPVOID lpParam // 这个一般是NULL。不用的
);
注:以上是一个创建窗口的函数 <CreaeWindow>创建窗口后
函数会返回一个句柄 这时要用一个 窗口句柄类型(HWND)
的变量来接收这个返回值。
作用是确定:
窗口的 标题、窗口样式、窗口位置、窗口大小、菜单、父窗口等等。
4、显示窗口与更新窗口
显示窗口
ShowWindow(XXXX, //第一个参数是 窗口句柄(HWND)
SW_SHOW //指定窗口如何显示
);
更新窗口
UpdateWindow(hWnd //窗口句柄
);
5、消息循环
下面是代码:
MSG msg; //声明消息结构
while(GetMessage(&msg,NULL,0,0)) //消息循环
{
TranslateMessage(&msg); //让Windows为与键盘相关的消息做一些转换
DispatchMessage(&msg); //分派消息到窗口过程函数中对消息处理
}
6、窗口函数
//窗口过程函数的实现(消息处理函数)
LRESULT CALLBACK MyWindowProc(
HWND hwnd, // handle to window 窗口句柄
UINT uMsg, // message identifier消息标识
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_PAINT:
{
TCHAR str[] = _T("这是一个Windows的SDK程序!");
HDC hDc;//声明HDC数据结构
PAINTSTRUCT Ps;
hDc = BeginPaint(hwnd,&Ps); //获取设备环境句柄
SetTextColor(hDc,RGB(13,25,200)); //设置文本颜色
TextOut(hDc,0,0,str,18); //输出文字
EndPaint(hwnd,&Ps); //释放资源
break;
}
case WM_CLOSE: //点击"X"按钮时发送此消息,使消息循环停止
if(IDYES == MessageBox(hwnd,_T("是否要退出?"),_T("提示"),MB_YESNO))
{
DestroyWindow(hwnd); //销毁窗口,发送WM_DESTROY消息,注意程序进程还没退出
}
break;
case WM_DESTROY:
PostQuitMessage(NULL); //进程结束,完全退出程序
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,_T("鼠标左键按下"),_T("提示"),MB_OK);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam); //处理未处理的消息
break;
}
return 0;
}
|