hello-win程序入门win32基本窗口框架全解析
来源:互联网 发布:淘宝机器人在哪里设置 编辑:程序博客网 时间:2024/04/30 02:16
在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; //附加字节,一般为0wcex.cbWndExtra= 0; //附加字节,一般为0wcex.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>
0 0
- hello-win程序入门win32基本窗口框架全解析
- WIN32基本窗体程序框架
- Win32汇编入门Hello World程序
- Win32基本概念及程序基本框架
- Android 多窗口框架全解析
- Win32 Hello World程序
- Win32窗口基本组成
- Win32 Asm 窗口程序
- Win32程序窗口过程
- Win32窗口程序实例
- Win32窗口程序实例
- Win32 Hello World程序[转]
- WIN32 基本应用框架
- win32基本框架
- Win32 Application基本框架
- 一个简单的win32程序开发框架—win-dev-framework
- [Win32]Win32窗口应用程序的框架
- win32 + OpenGL程序框架
- 通过配置Windows 防火墙允许使用TCP/IP协议远程访问数据库
- android4.4 wifi 扫描流程分析
- 图像处理------光束效果
- git 上传文件到仓库
- decode与case when的区别
- hello-win程序入门win32基本窗口框架全解析
- Git .gitignore使用
- selector xml文件选择器失效
- Leetcode NO.20 Valid Parentheses
- Git 常用命令整理
- Java Socket编程
- 互斥器(mutex)
- java中判断字符串是否为数字的三种方法
- 图像处理------应用卷积一实现噪声消去