龙骑士传六星英雄:用Win32 application建立窗体_入门
来源:百度文库 编辑:九乡新闻网 时间:2024/04/25 02:03:24
HINSTANCE hInst; // 当前实例句柄
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);// 回调函数
//在此加入全局变量、常量、函数、类等,供回调函数使用
/* * 主函数: int WINAPI WinMain(HANDLE, HANDLE, LPSTR, int) 初始化窗口,注册窗口,处理消息循环 **/
int WINAPI WinMain( //WINAPI也可用APIENTRY代替
HINSTANCE hInstance, /**当前实例句柄**/ HINSTANCE hPrevInstance,// 前一个实例句柄
LPSTR lpCmdLine,/**命令行字符串**/ int nCmdShow // 窗口显示方式
)
/** 回调函数: MainWndProc(HWND, UINT, WPARAM, LPARAM) 处理窗口消息,执行有关代码 **/
LRESULT CALLBACK MainWndProc(
HWND hWnd, /* 窗口句柄 */ UINT message, /* 消息类型 */
WPARAM wParam, /* 附加信息 */ LPARAM lParam) /* 附加信息 */
以下是一个实例:
#include
#include
HWND hWnd=NULL; // 保存 Windows 分配给程序的窗口句柄,它是全局的
LRESULT APIENTRY MainWndProc(HWND,UINT,WPARAM,LPARAM);
void MyMsgLoop();
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char clsName[]="myWnd";
WNDCLASS wc; //创建一个Windows窗体
wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;// 窗体风格
wc.lpfnWndProc = MainWndProc; // 窗体进程的指针
wc.cbClsExtra = 0L;
wc.cbWndExtra = 0L;
wc.hInstance = hInstance;// 窗体进程实例的句柄,通过WinMain主函数传递进来
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);// 背景画刷,也就是窗口显示背景颜色
wc.lpszMenuName = NULL;
wc.lpszClassName = clsName;// 注册的Windows类名称
RegisterClass(&wc);//调用RegisterClass函数进行注册
/ /具备了创建一个窗体的信息,开始调用API函数CreateWindow来进行窗体的创建工作
hWnd = CreateWindow(clsName,"主窗口",
WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
100, 100,400, 300,NULL,NULL,hInstance,NULL); // 创建窗口
ShowWindow( hWnd, SW_SHOWDEFAULT ); // 显示窗口
UpdateWindow( hWnd ); // 刷新窗口
//UpdateWindow函数用于更新窗口,该函数更新窗口的时候会向指定的窗体的进程发送消息,如果被更新的客户区为空,说明窗体没有接收到消息。
MyMsgLoop(); // 进入消息循环
return 0;
}
LRESULT APIENTRY MainWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam )
{// 消息处理
switch(message)
{
case WM_CREATE: // 当收到建立窗口的消息时,进行处理...
return 0;
break;
case WM_CLOSE: // 当收到关闭窗口的消息时,进行处理...
MessageBox(NULL,"窗口要关闭了","消息提示",MB_OK|MB_ICONEXCLAMATION);
PostQuitMessage(0);
return 0;
break;
case WM_DESTROY: // 当退出消息的时候,进行处理...
MessageBox(NULL,"退出消息了","消息提示",MB_OK|MB_ICONEXCLAMATION);
PostQuitMessage(0);
return 0;
break;
default:
break;
}
return (DefWindowProc(hWnd, message, wParam, lParam));
}
void MyMsgLoop()
{
MSG msg;
BOOL receiveMessage;
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{ // 消息循环
receiveMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
if(receiveMessage)
{ // 有消息
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}