win32创建控件和提示文本
2013-04-15 10:22
302 查看
基于SDK的win32程序框架一般总是由两个基本函数组成:一个是入口函数WinMain,它包含了整个框架的运行代码;另一个是用户定义的窗口过程函数SDKWndProc(名称可以在程序中自动定义),用来接收 和处理各种不同的消息。
在CALLBACK SDKWndProc 中,这样就创建了两个静态控件、一个编辑框和一个按钮。需要说明的是:
将hwndHint\hwndRes\hwndEdit和hwndButton窗口句柄定义成static的目的是使其成为全局变量,当SDKWndPro第一次调用创建后,就会一直有效。用CreateWindow函数创建窗口时,若指定的是预定义的窗口名BUTTON、COMBOBOX、EDIT、LISTBOX、SCROLLBAR和STATIC,则创建的是按钮、组合框、编辑框、列表框、滚动条和讲台空间等窗口。由于这些空间窗口必须是主窗口的子窗口,所以为其指定的风格中一定要有WS_CHILD和WS_VISIBLE,同时指定父窗口句柄为主窗口句柄hwnd。
各空间的字体可通过SendMessage函数并指定WM_SETFONT消息来更改。DEFAULT_GUI_FONT是获取系统消息对话框和菜单中的默认字体。
#include <windows.h> #include <stdio.h> LRESULT CALLBACK SDKWndProc (HWND, UINT, WPARAM, LPARAM); // 窗口过程 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd ; // 窗口句柄 MSG msg ; // 消息 WNDCLASS wndclass ; // 窗口类 wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = SDKWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject ( WHITE_BRUSH ) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = "SDKWin"; // 窗口类名 if (!RegisterClass (&wndclass)) // 注册窗口 { MessageBox (NULL, "窗口注册失败!", "HelloWin", 0) ; return 0 ; } // 创建窗口 hwnd = CreateWindow ("SDKWin", // 窗口类名 "实验2 Windows编程基础", // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式 CW_USEDEFAULT, // 窗口最初的 x 位置 CW_USEDEFAULT, // 窗口最初的 y 位置 400, // 窗口最初的 x 大小 320, // 窗口最初的 y 大小 NULL, // 父窗口句柄 NULL, // 窗口菜单句柄 hInstance, // 应用程序实例句柄 NULL) ; // 创建窗口的参数 ShowWindow (hwnd, nCmdShow) ; // 显示窗口 UpdateWindow (hwnd) ; // 更新窗口,包括窗口的客户区 while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; // 转换某些键盘消息 DispatchMessage (&msg) ; // 将消息发送给窗口过程,这里是WndProc } return msg.wParam ; } LRESULT CALLBACK SDKWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndHint, hwndRes, hwndEdit, hwndBtn; HFONT hFont; switch (message) { case WM_CREATE: hFont = (HFONT)GetStockObject ( DEFAULT_GUI_FONT ); hwndHint = CreateWindow("STATIC", "输入半径: ", WS_CHILD | WS_VISIBLE | SS_SIMPLE, 20, 20, 100, 20, hwnd, NULL, NULL, NULL ); hwndEdit = CreateWindow("EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 40, 100, 20, hwnd, NULL, NULL, NULL ); hwndBtn = CreateWindow("BUTTON", "圆面积", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 140, 40, 80, 20, hwnd, NULL, NULL, NULL ); hwndRes = CreateWindow("STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_SIMPLE, 20, 70, 180, 20, hwnd, NULL, NULL, NULL ); SendMessage(hwndHint, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE); SendMessage(hwndEdit, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE); SendMessage(hwndBtn, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE); SendMessage(hwndRes, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE); break; case WM_COMMAND: // 命令消息,控件产生的通知代码在wParam的高字中 if (((HWND)lParam == hwndBtn )&&( HIWORD(wParam) == BN_CLICKED )) { char strEdit[80]; // 获取编辑框控件的内容,并将其转换成float数值 if ( GetWindowText( hwndEdit, strEdit, 80) > 0 ) // 获取编辑框内容 { float fRes = (float)atof( strEdit ); if ( fRes > 0.0f ) { sprintf( strEdit, "圆面积为: %f", 3.14 * fRes * fRes ); SetWindowText( hwndRes, strEdit ); } else MessageBox( hwnd, "圆半径输入无效!", "注意", 0 ); } else MessageBox( hwnd, "请输入圆的半径!", "注意", 0 ); } break; case WM_DESTROY: // 当窗口关闭时产生的消息 PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; // 执行默认的消息处理 }
在CALLBACK SDKWndProc 中,这样就创建了两个静态控件、一个编辑框和一个按钮。需要说明的是:
将hwndHint\hwndRes\hwndEdit和hwndButton窗口句柄定义成static的目的是使其成为全局变量,当SDKWndPro第一次调用创建后,就会一直有效。用CreateWindow函数创建窗口时,若指定的是预定义的窗口名BUTTON、COMBOBOX、EDIT、LISTBOX、SCROLLBAR和STATIC,则创建的是按钮、组合框、编辑框、列表框、滚动条和讲台空间等窗口。由于这些空间窗口必须是主窗口的子窗口,所以为其指定的风格中一定要有WS_CHILD和WS_VISIBLE,同时指定父窗口句柄为主窗口句柄hwnd。
各空间的字体可通过SendMessage函数并指定WM_SETFONT消息来更改。DEFAULT_GUI_FONT是获取系统消息对话框和菜单中的默认字体。
相关文章推荐
- dojo 创建按钮和文本输入框 tip 提示以及控件焦点 focus
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- (CEGUI)如何创建控件 -------静态文本(lable)
- visual studio 2010 创建的MFC ActiveX 控件的工程 不能运行 提示:无法启动.ocx程序
- Win32 SDK创建RichEdit Control控件
- 使用vs2008创建.net2.0时网站时,使用Ajax控件会提示:Microsoft JScript 运行时错误: 'Sys' 未定义解决方案
- Web页面设计时提示"创建控件出错,未将对象引用设置到对象的实例”的错误解决办法
- 文本关键词醒目显示和智能提示 CodeMax控件
- Win32 API对文本框发送消息(多个文本Edit,动态 控件 ID)
- 【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】
- 封装一个Win32弹出提示框的函数(用于STATIC等控件显示Tooltip)
- 为 Windows 窗体控件创建工具提示 (Visual Basic)
- C++ Win32项目STATIC TEXT 控件中响应点击,并改变文本颜色
- 基于Jquery的文本提示控件 poshytip
- 从零开始学android:Android中的基本控件(下) —— 随笔提示文本:AutoCompleteTextView
- WIN32汇编: 27.工具提示控件
- vc++ win32项目添加文本编辑框、静态文本、按钮、Richedit等控件
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- AutoCompleteTextView 控件实现提示文本以及模糊查询
- c# 在 ComboBox 控件中创建大小可变的文本