标签: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