列表框
来源:互联网 发布:数学工具书 知乎 编辑:程序博客网 时间:2024/05/21 22:23
下面是一个将环境变量放在列表框中,点击其中某个条目时,就会在一个静态文本中显示该环境变量的值,如图:
环境变量吧,可以通过GetEnvironmentString函数获取,不过需要注意,windows的环境变量是存放在一个字符数组中,该函数返回指向该数组的第一个字符的指针 而且数组开头有一个特殊标志,会看到是这样的:"=::=::\\"
每个环境变量都是以”变量名=变量值”存放,所以数组中的内容是这样的:
"=::=::\\ 变量1=变量值1 变量2=变量值2 ..."
这里看到的是空格,其实是字符串结束标志’\0’,所以要输出环境变量需要跳过’\0’和”=::=::\”
下面就是一个简单的列表框小程序了
//不知道为什么同样的代码在vc可以运行而vs2013就不可与,郁闷!!???# include<windows.h># define ID_LIST 1# define ID_TEXT 2LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int iCmdShow){ static TCHAR szAppName[] = TEXT("那又怎样"); WNDCLASS wndclass; HWND hwnd; MSG msg; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//这里用NULL表示使用微软提供的图标 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //同上 wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WndProc; wndclass.lpszClassName = szAppName; wndclass.lpszMenuName = NULL; wndclass.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wndclass))//注册窗口类 { MessageBox(NULL, TEXT("Program requires windows NT!"), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppName, TEXT("Environment List Box"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, NULL,NULL, hInstance, NULL); ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0;}void FillListBox(HWND hwndList){ int iLength; TCHAR *pVarBlock, *pVarBeg, *pVarEnd, *pVarName,*p; pVarBlock = GetEnvironmentStrings();//Get pointer to environment block //环境变量是保存在一个字符数组里,开头有一个特殊标记,可以试一下,是字符串"=::=::\\" //然后每隔一个环境变量后面都会有一个字符串结束标志(‘\0’),所以要绕过第一次的"=::=::\\" //和'\0' p = pVarBlock;//保存该指针,以后要释放 while (*pVarBlock) { if (*pVarBlock != '=')//Skip variable names beginning with '=' { pVarBeg = pVarBlock; //Begining of variable name while (*pVarBlock++ != '=');//Scan until '=' pVarEnd = pVarBlock-1;//points to '='sign iLength = pVarEnd - pVarBeg;//Length of variable name //Allocate memory for the variable name and terminating zero. //Copy the variable name and append a zero pVarName =new TCHAR[iLength+1]; CopyMemory(pVarName, pVarBeg, iLength*sizeof(TCHAR)); pVarName[iLength] = '\0'; //Put the variable name in the list box and free menory SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)pVarName); delete []pVarName; } //当pVarBlock指向‘\0’时结束循环,pVarBlock++,就指向了下一个环境变量字符串 while (*pVarBlock++ != '\0'); //Scan until terminating zero } FreeEnvironmentStrings(p);}LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){ static HWND hwndList, hwndText; int ilndex, iLength, cxChar, cyChar; TCHAR *pVarName, *pVarValue; switch (uMsg) { case WM_CREATE: cxChar = LOWORD(GetDialogBaseUnits()); cyChar = HIWORD(GetDialogBaseUnits()); //Create listbox and static text windows hwndList = CreateWindow(TEXT("listbox"), NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, cxChar, cyChar * 3, cxChar * 16 + GetSystemMetrics(SM_CXVSCROLL), cyChar * 5, hwnd, (HMENU)ID_LIST, //这两种方法都可以获取父窗口的实例句柄,或者将其定义为全局变量 //(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), ((LPCREATESTRUCT)lParam)->hInstance, NULL); //静态文本 hwndText = CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, cxChar, cyChar, GetSystemMetrics(SM_CXSCREEN), cyChar, hwnd, (HMENU)ID_TEXT, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); FillListBox(hwndList); return 0; case WM_SETFOCUS: SetFocus(hwndList); return 0; case WM_COMMAND: if (LOWORD(wParam) == ID_LIST&&HIWORD(wParam) == LBN_SELCHANGE) { //Get currient selection ilndex = SendMessage(hwndList, LB_GETCURSEL, 0, 0); iLength = SendMessage(hwndList, LB_GETTEXTLEN, ilndex, 0) + 1; pVarName =new TCHAR[iLength]; SendMessage(hwndList, LB_GETTEXT, ilndex, (LPARAM)pVarName); //Get environment string iLength = GetEnvironmentVariable(pVarName, NULL, 0); pVarValue = new TCHAR[iLength];; GetEnvironmentVariable(pVarName, pVarValue, iLength); //Show it in window SetWindowText(hwndText, pVarValue); delete[]pVarName; delete[]pVarValue; } return 0; case WM_CLOSE: PostQuitMessage(0); //DestroyWindow(hwnd); return 0; } return DefWindowProc(hwnd, uMsg, wParam, lParam);}
0 0
- 列表框
- 列表框
- 使用代码使列表框自动列表
- android列表框配合SimpleAdapter实现列表
- android列表框配合BaseAdapter实现列表
- 列表框、组合框
- 组合框,列表框
- 列表框选择链接
- 列表框控件
- SELECT列表框提示
- SELECT列表框提示
- 下拉列表框组合
- 模拟下拉列表框
- 动态列表框
- 动态加载列表框
- 列表框的样式
- 颜色选择列表框
- 谈select列表框
- 深度学习之问题记录--fast r-cnn训练过程
- 选项卡面向对象写法
- SQL——高级教程概述
- 英文投稿的一点经验
- [生存志] 第141节 秦魏风俗掌故
- 列表框
- thinkphp比较完美的nginx配置
- Practice6_2_map_sort_by_comparator
- Hibernate环境配置
- Retrofit使用与解析
- hdu 1271 整数对(找规律)
- Ubuntu下gcc多版本共存和版本切换
- apache启动失败原因
- C+++多态性