我在網上查到的修改
這種方法并不管用,變成小白跟著這個網站上學的https://www.bilibili.com/video/BV1NJ411b7ZV?p=83,程式如下,請問該怎么修改#include<Windows.h>
#include "resource.h"
void FillListBox(HWND hwndList)
{
//TCHAR szBuf[1024];//使用堆疊
TCHAR* pVarName;//使用堆
// LPVOID pVName; //使用堆
TCHAR* pVarBlock;
TCHAR* pVarBeg, * pVarEnd;
int iLength;
pVarBlock = GetEnvironmentStrings();
while (*pVarBlock)
{
if (*pVarBlock != '=')
{
pVarBeg = pVarBlock;
while (*pVarBlock++ != '=');
pVarEnd = pVarBlock - 1;
iLength = pVarEnd - pVarBeg;
//使用堆疊
/* ZeroMemory(szBuf, 1024);
CopyMemory(szBuf, pVarBeg, iLength*sizeof(TCHAR));
SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)szBuf);*/
//使用堆
pVarName = (TCHAR*)calloc(iLength + 1, sizeof(TCHAR));
pVarName = (TCHAR*)malloc((iLength + 1) * sizeof(TCHAR)); ZeroMemory(pVarName, ((iLength + 1) * sizeof(TCHAR)));
CopyMemory(pVarName, pVarBeg, iLength * sizeof(TCHAR));
SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)pVarName);
free(pVarName);
//使用HeapAlloc
/*pVName = HeapAlloc(GetProcessHeap(), 0, (iLength + 1) * sizeof(TCHAR));
ZeroMemory(pVName, (iLength + 1) * sizeof(TCHAR));
CopyMemory(pVName, pVarBeg, iLength * sizeof(TCHAR));
SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)pVName);
HeapFree(GetProcessHeap(), 0, pVName);*/
}
while (*pVarBlock++ != '\0');
}
FreeEnvironmentStrings(pVarBlock);
}
INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL bRet = TRUE;
int iIndex, iLength;//串列中選到的是第幾個以及它有多長
TCHAR* pVarName, * pVarValue;
switch (uMsg)
{
case WM_INITDIALOG:
FillListBox(GetDlgItem(hDlg, IDC_LIST1));
break;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_LIST1 && HIWORD(wParam) == LBN_SELCHANGE)
{
iIndex = SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETCURSEL, 0, 0);
iLength=SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETTEXTLEN, iIndex, 0)+1;
pVarName = (TCHAR*)calloc(iLength, sizeof(TCHAR));
SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETTEXT, iIndex, (LPARAM)pVarName);
iLength=GetEnvironmentVariable(pVarName, NULL, 0);
pVarValue = (TCHAR*)calloc(iLength, sizeof(TCHAR));
GetEnvironmentVariable(pVarName, pVarValue, iLength);
SetWindowText(GetDlgItem(hDlg, IDC_LIST1), pVarValue);
free(pVarName);
free(pVarValue);
}
break;
case WM_CLOSE:
EndDialog(hDlg, 0);
break;
default:
bRet = FALSE;
break;
}
return bRet;
}
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, MainDlgProc);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/42753.html
標籤:C++ 語言
上一篇:請問為什么選c不選d
