نمایش نتایج 1 تا 3 از 3

نام تاپیک: دریافت ورودی از کاربر - [win32api]

  1. #1
    کاربر دائمی آواتار simul8or
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    API::WIN32-64
    پست
    110

    Post دریافت ورودی از کاربر توسط edit control -[مطلب آموزشی]

    **کد مریوط به 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 ها داده ام.

    امیدوارم مطلب فوق مفید واقع بشه.
    آخرین ویرایش به وسیله simul8or : جمعه 12 بهمن 1386 در 14:03 عصر دلیل: ایراد در قالب بندی

  2. #2

    نقل قول: دریافت ورودی از کاربر - [win32api]

    با سلام
    من یه پروژه MDI دارم که الان لازمه که کاربر یه رشته رو در محیط dc وارد کنه.ممنون میشم داهنماییم کنید

  3. #3

    نقل قول: دریافت ورودی از کاربر - [win32api]

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



    #ifdef UNICODE
    typedef WCHAR TCHAR;
    #else
    typedef char TCHAR;
    #endif
    Kernel Mode Developer
    RootKitSMM@Yahoo.com

تاپیک های مشابه

  1. MFC یا WIN32API ?
    نوشته شده توسط simul8or در بخش برنامه نویسی با MFC و ++Visual C
    پاسخ: 15
    آخرین پست: دوشنبه 13 خرداد 1387, 15:01 عصر
  2. تغییر رنگ Text Static Control - مربوط به win32api
    نوشته شده توسط d3dgameprogramming در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: سه شنبه 18 دی 1386, 21:21 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •