您的位置:首页 > 编程语言 > C语言/C++

C++窗体示范

2015-09-16 15:41 417 查看
#include <windows.h>

HWND HMainwnd = NULL; //窗体句柄

int run(); //消息循环函数

bool InitWindowsApp(HINSTANCE instanceHandle, int show); //窗体初始化函数

LRESULT CALLBACK WndProc(HWND wnd, UINT msg, WPARAM wp, LPARAM lp);//窗体处理回调函数

//main函数

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )

{

if(!InitWindowsApp(hInstance, nShowCmd))//判断窗体初始化是否成功

{

return 0;

}

run(); //初始化成功后循环接收消息

return 0;

}

bool InitWindowsApp(HINSTANCE stanceHandle, int show)

{

WNDCLASS wc; //窗体类结构体

wc.style = CS_HREDRAW | CS_VREDRAW; //窗体风格

wc.lpfnWndProc = WndProc; //窗体处理函数

wc.cbClsExtra = 0; //窗体类是否由扩展

wc.cbWndExtra = 0; //窗体实例是否由扩展

wc.hInstance = stanceHandle; //窗体句柄

wc.hIcon = LoadIcon(0, IDI_APPLICATION); //窗体图标

wc.hCursor = LoadCursor(NULL, IDC_ARROW); //窗体鼠标样式

wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //窗体背景颜色

wc.lpszMenuName = NULL; //窗体菜单

wc.lpszClassName = "BaseWndClass"; //窗体类名

if(!RegisterClass(&wc))
//判断窗体是否注册成功

{

MessageBox(0, "注册失败", 0, 0);

return false;

}

//创建窗体

HMainwnd = CreateWindow("BaseWndClass", //窗体类名

"MyFrom", //窗体标题名

WS_OVERLAPPEDWINDOW, //窗体风格

CW_USEDEFAULT,

CW_USEDEFAULT, //窗体坐标

CW_USEDEFAULT,

CW_USEDEFAULT, //窗体坐标

NULL, //窗体的父窗体

NULL, //窗体的子菜单

stanceHandle, //窗体句柄

NULL); // 如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL

if(HMainwnd == 0)//判断创建窗体是否成功

{

MessageBox(0, "创建窗体失败", 0, 0);

return false;

}

ShowWindow(HMainwnd, SW_SHOW); //显示窗体

UpdateWindow(HMainwnd); //绘制窗体;

return true;

}

LRESULT CALLBACK WndProc(HWND wnd, UINT msg, WPARAM wp, LPARAM lp)

{

switch(msg)//判断消息的种类

{

case WM_LBUTTONDOWN: //左键单击

MessageBox(0, "Hello World", "myMbox", MB_OK);

return 0;

case WM_KEYDOWN: //键盘消息

if(wp == VK_ESCAPE) //ESC键

DestroyWindow(HMainwnd); //销毁窗体

return 0;

case WM_DESTROY:

PostQuitMessage(0); //终止消息

return 0;

}

return DefWindowProc(wnd, msg, wp, lp); //返回缺省消息函数

}

int run()

{

MSG msg = {0}; //消息结构

BOOL bRet = 1; //获取消息

while( (bRet = GetMessage(&msg, 0, 0, 0)) != 0)//消息循环

{

if(bRet == -1)//判断消息是否接收失败

{

MessageBox(0, "接受消息失败", 0, 0);

break;

}

else

{

TranslateMessage(&msg); //转换消息为字符消息

DispatchMessage(&msg); //发送消息给窗口

}

}

return (int)msg.wParam;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: