View Full Version : مبتدی: چاپ آرایه CString در EditBox
kayvan
چهارشنبه 06 اردیبهشت 1391, 22:14 عصر
با سلام
من یه آرایه از نوع Ctring دارم اما هر کاری می کنم نمی تونم تو یه Editbox مقادیرش رو ببینم
من می خوام لیست کلید های رجیستری رو تو Editbox نمایش بدم که قسمت اول کد رو از کتاب آقای جناب نوشتم:
HKEY hkey;
DWORD dwIndex=0,dKeyNameBufSize=256;
wchar_t cahrKeyName[256]={0};
CString strKeyNames[100];
if(ERROR_SUCCESS==RegOpenKeyExW(HKEY_CURRENT_USER, L"Software", 0, KEY_ENUMERATE_SUB_KEYS, &hkey))
{
while(ERROR_NO_MORE_ITEMS!=RegEnumKeyExW(hkey ,dwIndex ,cahrKeyName ,&dKeyNameBufSize ,NULL ,NULL, NULL, NULL))
{
strKeyNames[dwIndex]=cahrKeyName;
dwIndex++;
dKeyNameBufSize=256;
}
CString Out;
for ( int i=0;i<100;i++)
{
Out+=(strKeyNames[i],"\n");
}
m_strRegValue.SetWindowTextW(Out);// m_strRegValue is the Var for n EditBox
RegCloseKey(hkey);
}
}
ASGGSA
چهارشنبه 06 اردیبهشت 1391, 22:47 عصر
سلام.
قبل از تابع SetWindowTextW تابع :
UpdateData(TRUE);
بنویسید.
kayvan
چهارشنبه 06 اردیبهشت 1391, 23:14 عصر
بازم Error داره
error C2039: 'SetWindowTextW' : is not a member of 'ATL::CStringT<BaseType,StringTraits>'
1> with
کدش رو به شکل زیر تغییر دادم درست شد:
CString as,ad;
for ( int i=0;i<100;i++)
{
as.Format(strKeyNames[i]);
ad+=as;
GetDlgItem(IDC_EDBOX2)->SetWindowText(ad) ;
}
فقط دوتا مشکل
1 اینکه با توجه به فرم بالا چجوری میشه رفت به خط بعد چون SetWindowText یک مقدار بیشتر نمی گیره !
2 اینکه تو static text چجوری میشه multiline داشت ؟
pe32_64
چهارشنبه 06 اردیبهشت 1391, 23:19 عصر
روي Edit Box کليک راست کنيد و Properties را بزنيد.
بعد Multiline و Auto VScroll را true کنيد.
و کد تصحيح شده:
HKEY hkey;
DWORD dKeyNameBufSize=255;
wchar_t cahrKeyName[255]={0};
CString strKeyNames[100];
if(ERROR_SUCCESS==RegOpenKeyExW(HKEY_CURRENT_USER, L"Software", 0, KEY_ENUMERATE_SUB_KEYS, &hkey))
{
for(int i=0;i<100;i++)
{
RegEnumKeyExW(hkey ,i ,cahrKeyName ,&dKeyNameBufSize ,NULL ,NULL, NULL, NULL);
strKeyNames[i]=cahrKeyName;
dKeyNameBufSize=255;
}
CString Out;
for ( int i=0;i<100;i++)
Out+=strKeyNames[i]+L"\r\n";
m_strRegValue.SetWindowTextW(Out);
RegCloseKey(hkey);
kayvan
چهارشنبه 06 اردیبهشت 1391, 23:32 عصر
بازم همون Error رو میده:
ex002dlg.cpp(286) : error C2039: 'SetWindowTextW' : is not a member of 'ATL::CStringT<BaseType,StringTraits>'
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC<wchar_t>
1> ]
pe32_64
پنج شنبه 07 اردیبهشت 1391, 15:22 عصر
در پنجره ی add member variable در قسمت Category شما Control را انتخاب کن.
86334
mehdi.mousavi
شنبه 09 اردیبهشت 1391, 18:37 عصر
با سلام من یه آرایه از نوع Ctring دارم اما هر کاری می کنم نمی تونم تو یه Editbox مقادیرش رو ببینم من می خوام لیست کلید های رجیستری رو تو Editbox نمایش بدم که قسمت اول کد رو از کتاب آقای جناب نوشتم:
سلام.
کدی که نوشته اید رو می تونید در MFC بهتر از این ها بنویسید:
CString names;
CRegKey reg;
if(reg.Open(HKEY_CURRENT_USER, _T("Software")) == ERROR_SUCCESS)
{
DWORD cbName, dwIndex = 0;
TCHAR szName[256] = {NULL};
while(cbName = 256, reg.EnumKey(dwIndex++, szName, &cbName) != ERROR_NO_MORE_ITEMS)
names.AppendFormat(_T("%s\r\n"), szName);
}
کلاس CRegKey کلاسی هستش که به شما اجازه کار با Registry رو میده و خودش هنگام Destruct شدن، کلید مورد نظر رو Close خواهد کرد. این کلاس در atlbase.h تعریف شده.
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.