PDA

View Full Version : دریافت ورودی از کاربر - [win32api]



simul8or
پنج شنبه 11 بهمن 1386, 20: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 ها داده ام.

امیدوارم مطلب فوق مفید واقع بشه.

shahr_ashub
جمعه 27 اسفند 1389, 04:39 صبح
با سلام
من یه پروژه MDI دارم که الان لازمه که کاربر یه رشته رو در محیط dc وارد کنه.ممنون میشم داهنماییم کنید

r00tkit
جمعه 27 اسفند 1389, 09:26 صبح
(نکته مهم: اگر در قسمت تنظیمات پروژه در قسمت general گزینه use Unicode Character set رو انتخاب کردید ، باید از آرایه ای با نوع داده TCHAR برای ذخیره رشته استفاده کنید.)

این T برای اینه که با توجه به همون تنظیمی که گفتی نوع انتخواب بشه



#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif