16 Windows编程——系统内置窗口子类型之edit、ComboBox
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了16 Windows编程——系统内置窗口子类型之edit、ComboBox,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6830字,纯文字阅读大概需要10分钟。
内容图文
edit类型的子窗口
ES_MULTILINE:多行输入文本框
窗口的消息:
WL_COMMAND:
EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_COMMAND消息,其通知码是EN_CHANGE。
WM_GETTEXT:
用SendMessage函数给edit窗口发送这个消息,同时,给wparam参数传递我们想要获得的字符个数,lParam传递一个内存块地址,sendMessage函数返回后,
lParam指向的内存中,将保存获得的字符。
WL_GETTEXTLENGTH:
用 SendMessage函数给edit窗口发送这个消息,将wParam和1Param都赋值为NULL,那SendMessage函数,将返回edit中的字符个数,但这个字符个数不包括NULL结尾字符。
edit空间演示源码
1 #include<Windows.h> 2 3LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); 4 5int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow) 6{ 7 WNDCLASS WndClass; 8 TCHAR* ClassName = TEXT("MyClass"); 9 HWND hwnd; 10 MSG msg; 11 HBRUSH hBrush; 12 hBrush = CreateSolidBrush(RGB(249,98,241)); 1314 WndClass.cbClsExtra = 0; 15 WndClass.cbWndExtra = 0; 16 WndClass.hbrBackground = hBrush; 17 WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); 18 WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 19 WndClass.hInstance = hInst; 20 WndClass.lpfnWndProc = WindProc; 21 WndClass.lpszClassName = ClassName; 22 WndClass.lpszMenuName = NULL; 23 WndClass.style = CS_VREDRAW | CS_HREDRAW; 2425if (!RegisterClass(&WndClass)) 26 { 27 MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK); 28return0; 29 } 3031 hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInst, NULL); 32if (hwnd == NULL) 33 { 34 MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK); 35return0; 36 } 37 ShowWindow(hwnd, nShow); 38 UpdateWindow(hwnd); 3940while (GetMessage(&msg, NULL, 0, 0)) 41 { 42 TranslateMessage(&msg); 43 DispatchMessage(&msg); 44 } 4546return0; 47} 4849LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 50{ 51 HDC hdc; 52staticint cx, cy; 53static editHwnd, staticHwnd; 54 TCHAR str[1024]; 55int length; 56switch (message) 57 { 58case WM_CREATE: 59 editHwnd = CreateWindow(TEXT("edit"),NULL, WS_CHILD | WS_VISIBLE|WS_BORDER|ES_MULTILINE|ES_AUTOVSCROLL , 0, 0, 0, 0, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL); 60 staticHwnd = CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_VISIBLE|WS_BORDER, 0, 0, 0, 0, hwnd, (HMENU)2, GetModuleHandle(NULL), NULL); 61return0; 62case WM_SIZE: 63 cx = LOWORD(lParam); 64 cy = HIWORD(lParam); 65 MoveWindow(editHwnd, 0, 0, cx/2, cy/2, TRUE); 66 MoveWindow(staticHwnd, cx / 2, cy / 2, cx, cy, TRUE); 67return0; 68case WM_COMMAND: 69if (HIWORD(wParam)==EN_CHANGE) 70 { 71 length = SendMessage(editHwnd, WM_GETTEXTLENGTH, NULL, NULL) + 1; 72 length = length > 1023 ? 1023 : length; 73 SendMessage(editHwnd, WM_GETTEXT, length, (LPARAM)str) ; 74 str[length] = ‘/0‘; 75 SetWindowText(staticHwnd,str); 76 } 77return0; 78case WM_DESTROY: 79 PostQuitMessage(0); 80return0; 81default: 82break; 83 } 8485return DefWindowProc(hwnd, message, wParam, lParam); 86 }
运行结果
ComboBox类型的子窗口
ComboBox子窗口的三种主要子类型:
CB_ADDSTRING:在combobox控件的list框中,增加一个字符串,wParam=NULL,lParam符串的指针。
WL_COMMAND:
CBN_SELCHANGE:当combobox中的选项发生变化时,发送这个通知码,其中LOWORD(lParam)就是这个combobox的窗口标识ID。
CB_GETCURSEL:用SendMessage函数,发送这个消息给combobox子窗口,那么这个函数将返回被选中的列表项的索引(索引是从0开始的)。wParam=lParam=NULL.
演示代码
1 #include<Windows.h> 2 #include<WinUser.h> 3 #include<tchar.h> 4 #include<stdio.h> 5 6LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); 7 8int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow) 9{ 10 WNDCLASS WndClass; 11 TCHAR* ClassName = TEXT("MyClass"); 12 HWND hwnd; 13 MSG msg; 1415 WndClass.cbClsExtra = 0; 16 WndClass.cbWndExtra = 0; 17 WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); 18 WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); 19 WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 20 WndClass.hInstance = hInst; 21 WndClass.lpfnWndProc = WindProc; 22 WndClass.lpszClassName = ClassName; 23 WndClass.lpszMenuName = NULL; 24 WndClass.style = CS_VREDRAW | CS_HREDRAW; 2526if (!RegisterClass(&WndClass)) 27 { 28 MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK); 29return0; 30 } 3132//CreateWindow返回之前,会发送WM_CREATE消息33 hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInst, NULL); 34if (hwnd == NULL) 35 { 36 MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK); 37return0; 38 } 39 ShowWindow(hwnd, nShow); 40 UpdateWindow(hwnd); 4142while (GetMessage(&msg, NULL, 0, 0)) 43 { 44 TranslateMessage(&msg); 45 DispatchMessage(&msg); 46 } 4748return0; 49} 5051LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 52{ 53 PAINTSTRUCT pt; 54 HDC hdc; 55static HWND ComboHwnd1, ComboHwnd2, ComboHwnd3,button,staticHwnd; 56 TCHAR str[1024]; 57switch (message) 58 { 59case WM_CREATE: 60 ComboHwnd1 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_SIMPLE|CBS_AUTOHSCROLL|WS_VSCROLL, 0, 0, 0, 0, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL); 61 ComboHwnd2 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWN, 0, 0, 0, 0, hwnd, (HMENU)2, GetModuleHandle(NULL), NULL); 62 ComboHwnd3 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 0, 0, 0, 0, hwnd, (HMENU)3, GetModuleHandle(NULL), NULL); 63 button = CreateWindow(TEXT("button"), TEXT("OK"), WS_CHILD | WS_VISIBLE , 0, 0, 0, 0, hwnd, (HMENU)4, GetModuleHandle(NULL), NULL); 64 staticHwnd= CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU)5, GetModuleHandle(NULL), NULL); 65return0; 66case WM_SIZE: 67 MoveWindow(ComboHwnd1, 0, 0, 100, 100, TRUE); 68 MoveWindow(ComboHwnd2, 150, 0, 100, 150, TRUE); 69 MoveWindow(ComboHwnd3, 300, 0, 100, 150, TRUE); 70 MoveWindow(button, 20, 120, 50, 25, TRUE); 71 MoveWindow(staticHwnd, 0, 150, 100, 100, TRUE); 72 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-1")); 73 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-2")); 74 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-3")); 75 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-4")); 76 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-5")); 77 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-6")); 78 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-7")); 79 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-8")); 80 SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-9")); 81return0; 82case WM_COMMAND: 83if (HIWORD(wParam) == CBN_SELCHANGE) 84 { 85 GetWindowText(ComboHwnd1,str,50); 86 SetWindowText(staticHwnd,str); 87 } 88return0; 89case WM_DESTROY: 90 PostQuitMessage(0); 91return0; 92default: 93break; 94 } 9596return DefWindowProc(hwnd, message, wParam, lParam); 97 }
运行结果:
原文:https://www.cnblogs.com/kelamoyujuzhen/p/9343731.html
内容总结
以上是互联网集市为您收集整理的16 Windows编程——系统内置窗口子类型之edit、ComboBox全部内容,希望文章能够帮你解决16 Windows编程——系统内置窗口子类型之edit、ComboBox所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。