simul8or
پنج شنبه 11 بهمن 1386, 21:42 عصر
**کد مریوط به win32api است.**
کد زیر از کاربر یک رشته ی عددی دریافت و در یک متغییر از نوع integer ذخیره می کند.
(نکته مهم: اگر در قسمت تنظیمات پروژه در قسمت general گزینه use Unicode Character set رو انتخاب کردید ، باید از آرایه ای با نوع داده TCHAR برای ذخیره رشته استفاده کنید.)
فرض میکنیم این برنامه دارای محدودیتی به شرح زیر است:
فقط یک عدد 2 رقمی باید دریافت شود(برای ارقام متغییر باید تغییراتی جزئی در کد اعمال شود.)
تمامی کد در تایع Message handler که برای DialogBox تعریف کردیم نوشته خواهد شد:
INT_PTR CALLBACK NewPrg(HWND hDlg, UINT message, WPARAM wParam/* LOWORD(in controls)=id HIWORD(in controls)=notify*/, LPARAM lParam)
تایع NewPrg یک Message handler برای dialogbox است.
یک هندل برای edit control تعریف می کنیم:
HWND HEdit = GetDlgItem(hDlg, IDC_NEW_EDIT);
متغییر های مورد نیاز را به این صورت تعریف می کنیم:
TCHAR CHTeamNum[3];//array for saving characters
int TeamNumLen;//saving string length
int ITeamNum;//saving integer
کد زیر را برای Focus کردن روی edit control در مسیج WM_INITDIALOG قرار دهید:
SetFocus(HEdit);
به محض Focus شدن مسیج IDC_NEW_EDIT به تابع ارسال خواهد شد.
بقیه کد ها در مسیج های IDOK (که توسط مسیج WM_COMMAND دریافت می شود) و
IDC_NEW_EDIT (مسیج برای آی دی edit control) نوشته می شوند:
کد زیر جهت محدود سازی تعداد کاراکتر های ورودی توسط کاربر در مسیج IDC_NEW_EDIT نوشته می شود:
SendMessage(HEdit,EM_SETLIMITTEXT,2/*limitation*/,0);//send EM_SETLIMITTEXT message to Message handler .(for limiting)
کد های زیر در IDOK قرار می گیرند:
TeamNumLen = SendDlgItemMessage(hDlg,IDC_NEW_EDIT,EM_LINELENGTH , 0, 0);
///////////////////////////////////////// error handling
if(TeamNumLen==0)
{
MessageBox(hDlg,TEXT("No number entered"),TEXT("Input error"),MB_OK | MB_ICONSTOP);
return (INT_PTR) FALSE;
}
else if(TeamNumLen < 2)
{
MessageBox(hDlg,TEXT("Too small number (only 2 digits number must be entered)"),TEXT("Input error"),MB_OK | MB_ICONSTOP);
return (INT_PTR) FALSE;
}
/////////////////////////////////////////
//get edit control characters and save them in CHTeamNum array;
SendDlgItemMessage(hDlg,IDC_NEW_EDIT,EM_GETLINE,0, (LPARAM) CHTeamNum);
//null-terminate string
CHTeamNum[TeamNumLen]='\0';
//Convert a string to integer
ITeamNum=_wtoi(CHTeamNum);
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR) TRUE;
توضیحات لازم را در کد توسط comment ها داده ام.
امیدوارم مطلب فوق مفید واقع بشه.
کد زیر از کاربر یک رشته ی عددی دریافت و در یک متغییر از نوع integer ذخیره می کند.
(نکته مهم: اگر در قسمت تنظیمات پروژه در قسمت general گزینه use Unicode Character set رو انتخاب کردید ، باید از آرایه ای با نوع داده TCHAR برای ذخیره رشته استفاده کنید.)
فرض میکنیم این برنامه دارای محدودیتی به شرح زیر است:
فقط یک عدد 2 رقمی باید دریافت شود(برای ارقام متغییر باید تغییراتی جزئی در کد اعمال شود.)
تمامی کد در تایع Message handler که برای DialogBox تعریف کردیم نوشته خواهد شد:
INT_PTR CALLBACK NewPrg(HWND hDlg, UINT message, WPARAM wParam/* LOWORD(in controls)=id HIWORD(in controls)=notify*/, LPARAM lParam)
تایع NewPrg یک Message handler برای dialogbox است.
یک هندل برای edit control تعریف می کنیم:
HWND HEdit = GetDlgItem(hDlg, IDC_NEW_EDIT);
متغییر های مورد نیاز را به این صورت تعریف می کنیم:
TCHAR CHTeamNum[3];//array for saving characters
int TeamNumLen;//saving string length
int ITeamNum;//saving integer
کد زیر را برای Focus کردن روی edit control در مسیج WM_INITDIALOG قرار دهید:
SetFocus(HEdit);
به محض Focus شدن مسیج IDC_NEW_EDIT به تابع ارسال خواهد شد.
بقیه کد ها در مسیج های IDOK (که توسط مسیج WM_COMMAND دریافت می شود) و
IDC_NEW_EDIT (مسیج برای آی دی edit control) نوشته می شوند:
کد زیر جهت محدود سازی تعداد کاراکتر های ورودی توسط کاربر در مسیج IDC_NEW_EDIT نوشته می شود:
SendMessage(HEdit,EM_SETLIMITTEXT,2/*limitation*/,0);//send EM_SETLIMITTEXT message to Message handler .(for limiting)
کد های زیر در IDOK قرار می گیرند:
TeamNumLen = SendDlgItemMessage(hDlg,IDC_NEW_EDIT,EM_LINELENGTH , 0, 0);
///////////////////////////////////////// error handling
if(TeamNumLen==0)
{
MessageBox(hDlg,TEXT("No number entered"),TEXT("Input error"),MB_OK | MB_ICONSTOP);
return (INT_PTR) FALSE;
}
else if(TeamNumLen < 2)
{
MessageBox(hDlg,TEXT("Too small number (only 2 digits number must be entered)"),TEXT("Input error"),MB_OK | MB_ICONSTOP);
return (INT_PTR) FALSE;
}
/////////////////////////////////////////
//get edit control characters and save them in CHTeamNum array;
SendDlgItemMessage(hDlg,IDC_NEW_EDIT,EM_GETLINE,0, (LPARAM) CHTeamNum);
//null-terminate string
CHTeamNum[TeamNumLen]='\0';
//Convert a string to integer
ITeamNum=_wtoi(CHTeamNum);
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR) TRUE;
توضیحات لازم را در کد توسط comment ها داده ام.
امیدوارم مطلب فوق مفید واقع بشه.