标签:windows
在VC++6.0环境中创建win32程序
选择第三个这时可以运行看到hello world了。
程序解析:
#define MAX_LOADSTRING 100 \\定义最大字长</span> HINSTANCE hInst; \\当前进程资源的句柄 TCHAR szTitle[MAX_LOADSTRING]; \\窗口上方显示的标题 TCHAR szWindowClass[MAX_LOADSTRING]; \\窗口定义的名称
实际上前面第一行的句柄就相当于ID号,每运行一个进程都需要系统分配一个编码来标示它。TCHAR是双字节的字符类型,char为单字节。
这是win32程序的主程序相当于main:
int APIENTRY WinMain(HINSTANCE hInstance, //当前实例的句柄(标志)windows是多任务操作系统,一个程序可以运行多个实例,为了区分它
HINSTANCE hPrevInstance, //前一个实例的句柄
LPSTR lpCmdLine, //长字符串指针数据类型,传给WinMain命令
int nCmdShow) //指定窗口如何显示,应用程序常不理会该值
{.
MSG msg; //消息数据类型
HACCEL hAccelTable; //存放键盘加速键表的句柄,键盘加速键是应用程序使用的快捷键如word下ALT+F查找
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); //将IDS_APP_TITLE里的内容载入字符串szTitle中
LoadString(hInstance, IDC_TEST, szWindowClass, MAX_LOADSTRING); //将IDC_TEST里的内容载入字符串szWindowClass中
MyRegisterClass(hInstance); //注册窗口
if (!InitInstance (hInstance, nCmdShow)) //启动窗口,失败则程序退出
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TEST); //载入快捷键表,该表能在资源VC的视图中看到
while (GetMessage(&msg, NULL, 0, 0)) //消息循环,如果得到退出消息返回0
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) //如果是不是快捷键则进入if,是则直接发给窗口过程
{
TranslateMessage(&msg); //翻译消息
DispatchMessage(&msg); //发送消息给窗口过程
}
}
return msg.wParam; //返回退出
}ATOM MyRegisterClass(HINSTANCE hInstance) //ATOM为unsigned short类型
{
WNDCLASSEX wcex; //定义一个窗口类
wcex.cbSize = sizeof(WNDCLASSEX); //窗口大小
wcex.style = CS_HREDRAW | CS_VREDRAW; //窗口风格,用|符号能够同时选中,具体类型看下面的图
wcex.lpfnWndProc = (WNDPROC)WndProc; //窗口过程函数,下面有定义
wcex.cbClsExtra = 0; //附加字节,一般为0
wcex.cbWndExtra = 0; //附加字节,一般为0
wcex.hInstance = hInstance; //实例句柄
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_TEST); //窗口图标,可以在资源视图中改
wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //窗口中光标的风格
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //窗口画刷颜色
wcex.lpszMenuName = (LPCSTR)IDC_TEST; //菜单资源名称,可以在资源视图中改
wcex.lpszClassName = szWindowClass; //窗口类名称
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); //窗口小图标
return RegisterClassEx(&wcex); //注册
}窗口风格:
启动窗口:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) //启动窗口函数,第二个参数为启动类型
{
HWND hWnd; //定义窗口句柄(标识)
hInst = hInstance; // Store instance handle in our global variable,翻译过来是将记录当前实例的句柄设置为该实例
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, //创建窗口
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd) //判断是否创建成功
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow); //显示窗口
UpdateWindow(hWnd); //刷新窗口
return TRUE;
}
窗口过程:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) //回掉系统API窗口过程函数,后面两个参数为消息
{ //附加信息
int wmId, wmEvent;
PAINTSTRUCT ps; //保存了窗口绘制信息
HDC hdc; //窗口中元素的句柄
TCHAR szHello[MAX_LOADSTRING]; //定义双字节字符串
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); //将资源表里的字符给szHello变量
switch (message) //选择消息
{
case WM_COMMAND: //菜单中选中一个命令时得到的消息
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT: //关于
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); //跳出新图形窗口
break;
case IDM_EXIT: //退出
DestroyWindow(hWnd); //销毁窗口
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT: //绘制,该消息在窗口拉伸收缩、最小化后能接收到
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt; //定义矩形变量
GetClientRect(hWnd, &rt); //将窗口尺寸赋给矩形变量
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); //在窗口上打印szHello里的内容
//当需要在指定位置格式化输出可以使用:TextOut(hdc,1,1,buff,wsprintf(buff,TEXT("lalla %i"),aa));i为int类型
//先要定义TCHAR类型输出缓冲数组buff
//如果需要强制重绘,可以用InvalidateRect(hWnd,NULL,TRUE);
EndPaint(hWnd, &ps); //结束绘制
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}</span>关于:
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) //菜单中点击关于弹出的小窗口
{
switch (message) //选择消息
{
case WM_INITDIALOG: //此处添加初始化时进行的内容,默认没有添加
return TRUE; //正常退出
case WM_COMMAND: //选择了其中的按钮
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) //如果点"确定"或者"取消"
{
EndDialog(hDlg, LOWORD(wParam)); //结束
return TRUE; //正常退出
}
break;
}
return FALSE; //异常退出
}</span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:windows
原文地址:http://blog.csdn.net/calcular/article/details/47036079