اگه به خاطر داشته باشید قبلا هم یکبار در مورد تابع EnumKey بحث کردیم اما من توی پارامتر سوم این تابع مشکل دارم و مشکل شمردن کلید ها رو اونجا با روشی برطرف کردم .
این چیزی است که در msdnدر مورد پارامتر سوم این تابع آمده :
pnNameLength
اشاره گری به یک متغیر که سایز را به TCHAR مشخص میکند .سایز بافر مشخص شده با پارامتر pszName .این سایز باید شامل کاراکتر به NULL ختم شده باشد . هنگامی که متد بازگشت میشود ، متغیر اشاره شده با pnNameLength شامل تعداد کاراکترهای ذخیره شده در بافر میشود. . .
من اینطوری از این تابع استفاده میکنم :
int i=0;
TCHAR subname[MAX_KEY_LENGTH];
DWORD namelen=MAX_KEY_LENGTH;
while(LONG retCode=m_cKey.EnumKey(i,subname,&namelen,NULL)!=E RROR_NO_MORE_ITEMS){
if (retCode == ERROR_SUCCESS)
{
_tprintf(TEXT("(%d) %s\n"), i+1, subname);
}
}
که البته واقعیتش اینه که در شرط if متوجه نیستم دقیقا چی اتفاق میفته و فقط از msdn کپی کردم
اما کاری رو که من میخوام انجام بدم اینه :
قصد دارم یک لیست درست کنم با یک دکمه Add و یک کادر ویرایش . . . میخوام زمانی که کاربر دکمه Add رو کلیک میکنه یک کلید در رجیستری با مقدار رشته ای ایجاد شه و متن درون کادر ویرایش در اون ذخیره بشه
الگوریتمی رو که من پیاده کردم اینطوری بود : یک کلید رشته ای با نام خاصی رو ایجاد میکردم و در اون یک عدد رو به صورت رشته ای ذخیره میکردم و بعدش در هر بار کلیک کاربر این کارها رو میکردم :
1-اون عددی رو که به صورت رشته ای بود رو از کلید میخوندم .
2- با این مقدار رشته ای یک کلید میساختم و رشته کادر ویرایش رو در اون ذخیره میکردم.
3-عدد رشته ای رو به عدد integer تبدیل میکردم.
4-به عدد حاصل یکی اضافه میکردم.
5-عدد رو دوباره به رشته تبدیل میکردم.
6-رشته جدید رو در همون کلید اصلی که گفتم ذخیره میکردم.
پس در حقیقت مشکل نام و شمردن کلیدها برطرف میشد اما یکی از مشکلاتی که برای من بوجود آمد سوال اول پست قبل من بود چرا که من قصد داشتم در هر بار اجرای برنامه تمام مقادیر رشته ای کلیدها در لیست نمایش داده شوند که لازم بود من نام کلیدها رو میدانستم . . . شاید شما بگید که نام کلیدها همان اعداد رشته ای هستند اما مطمئنا با بزرگ شدن برنامه به مشکلاتی مثل حذف شدن یک کلید و . . . روبرو میشدم .
سوالم رو در یک خط دوباره میگم :
چطور میشه تمام کلیدهای رشته ای رو خوند و اونها رو در یک لیست نمایش داد ؟