![]() |
|
טלקל חיש-וד ןולח - C/C++ | |
![]() |
|
ישאר דומע | םיניינע ןכות | סינוקא ןד תאמ |
![]() |
.ןולחה ףוגב םמוכס תא הסיפדמו םיכרע b-ו a םינתשמ ינשל תטלוק רשאש תינכות בותכנ ץחול שמתשמה רשאכ ותוא תוארהל םג לכונ .תינכותה תליחתב הארייש חיש-וד ןולח י"ע עצבתי טלקה .הארנ חיש-וד ןולח ךיא תוארל לכות הטמל הנומתב .תינכותה לש ישארה ןולחה חטשב רבכעה ןצחל לע .ונינפל גצות םוכסה תאצות ,Enter שקמ לע וא OK רותפכ לע ץחלנ רשאכ ![]() תונשל לכונ .לדחמה תרירב רותפכ אוה OK רותפכהש םושמ Enter לע וא OK רותפה לע ץוחלל םילוכי ונא .TAB שקמה י"ע רחא רותפכל תוסחייתהה תא תואבה תורושה םע שדח rc ץבוק רוצינ .(rc) באשמל-דוק-ץבוקב ראותמ חיש-ודה ןולח :(ץבוק ותואב ותוא ףיסוהל םיכירצ ונייה ,טירפת םג םיצור ונייה םא ןכלו תינכותב דחא rc ץבוק קר רתומ ,בגא-ךרד) //input.rc: #include <windows.h> #include "input.h" DWINDOW DIALOG 80, 60, 110, 80 STYLE DS_MODALFRAME CAPTION "Input of A and B" { LTEXT, "Number A:", -1, 10, 10, 30, 12 EDITTEXT ID_A, 40 10, 50, 12 LTEXT, "Number B:", -1, 10, 30, 30, 12 EDITTEXT ID_B, 40, 30, 50, 12 DEFPUSHBUTTON "OK", ID_OK, 15, 60, 30, 15 PUSHBUTTON "Cancel", ID_CANCEL, 65, 60, 30, 15 } DIALOG הרהצהה ,הז ץבוקב DWINDOW DIALOG 80, 60, 110, 80 תילאמשה הניפה תדוקנ תא םירידגמ םינושארה םירטמרפה ינש .חיש-ודה ןולח לש ולדוגו ומוקימ תא הרידגמ .ןולחה לש והבוגו ובחור תא םידציימ םינורחאה םירטמרפה ינשו הנוילעה םוקימ לש םירטמרפ םתוא תא םירידגמ ונא הל םג .editcontrol תארקנ םינותנ סינכהל םילוכי ונא הב טסקטה תבית .לדוגו EDITTEXT ID_A, 40 10, 50, 12 EDITTEXT ID_B, 40, 30, 50, 12 :םירותפכה תורדגה DEFPUSHBUTTON "OK", ID_OK, 15, 60, 30, 15 PUSHBUTTON "Cancel", ID_CANCEL, 65, 60, 30, 15 ךרטצנ ,רחא רותפכל תונפל הצרנשכ .וילא סחייתת ENTER לע הציחל ןכל .לדחמה תרירב רותפכ אוה OK ,ונרמאש ומכ לדחמה תרירב רותפכ תא הרידגמ DEFPUSHBUTTON הלימה .ןמוסי יוצרה רותפכה רשא דע TAB שקמה לע שיקהל .לדחמ תרירב אלל רותפכ הרידגמ PUSHBUTTON הלימה וליאו ![]() תרתוכה ץבוקב םתוא רידגנ ונא .םהילא סחייתנ ךכו םינושה םידקפל םינתינ ID_OK וא ID_A ומכ םיעובק לאמשמ תואצמנה טסקטה תויוותל אלו דבלב םירותפכו טסקטה תוביתל סחייתהל םיצור ונא ,ונלש הרקמב .input.h :-1 ןוגכ וב שמתשנ אלש רפסמ םע תוסחייתה ךרע ןתינ תויוותל ,ןכל .("Number A:" :ןוגכ) טסקטה תוביתל LTEXT, "Number A:", -1, 10, 10, 30, 12 (LTEXT, title, idNumber, X, Y, Width, Height) .(זכרוממ) CTEXT וא (ןימיל רושיי) RTEXT םושרל לכונ .לאמשל רשוימ טסקט הליכמ LTEXT תיותה :הרושה ףוסבלו .חיש-ודה ןולח תרתוכ תא הרידגמ CAPTION הלימה םע הרושה STYLE DS_MODALFRAME ןטקה למסה היהי ןטקה יונישה .ונלביקש המל ההז טעמכ ןולח גצוי ,התוא םושרנ אל םא .ןולחה גוס תא תראתמ .וילע רתוונ ןכלו ותוא ךרטצנ אל הז הרקמב .ןולחל תכרעמה טירפת תא ליכמ רשא ןולחה תרתוכ דיל Windows לש :Input.h ץבוקב םירדגומ (controls) םירקבל םיסחייתמה םיעובקה לכ ,םדוק יתרמאש ומכ //input.h: #define ID_A 1001 #define ID_B 1002 #define ID_OK 1003 #define ID_CANCEL 1004 // function that handles dialogbox messages BOOL CALLBACK InputProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam); :ךכ רדגומ Input.cpp ץבוקה //input.cpp: Demonstration of input // link with win.obj and resource-script-file input.rc #include <stdio.h> #include "win.h" #include "input.h" static win *pWin; static float a, b; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { win w(hInstance, iCmdShow, "input", "input: Press the leftmousebutton"); pWin = &w; return w.result(); } LRESULT CALLBACK WndProc (HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch (iMsg) { case WM_SIZE: case WM_LBUTTONDOWN: { int n = DialogBox (pWin->hInstance, "DWINDOW", hWnd, InputProc); if (n == 2) { char buf[30]; sprintf(buf, "A + B equals %g.", a + b); HDC hDC = GetDC(hWnd); TextOut(hDC, 20, 20, buf, strlen(buf)); ReleaseDC(hWnd, hDC); } else if (n >= 0) MessageBox(hWnd, "Bad input", "Error", MB_OK | MB_ICONSTOP); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, iMsg, wParam, lParam); } BOOL CALLBACK InputProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch(iMsg) { case WM_INITDIALOG: SetFocus(GetDlgItem(hDlg, ID_A)); return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_OK: { char buffer[16]; int nGood; GetDlgItemText(hDlg, ID_A, buffer, 15); nGood = (sscanf(buffer, "%f", &a) == 1); GetDlgItemText(hDlg, ID_B, buffer, 15); nGood += (sscanf(buffer, "%f", &b) == 1); EndDialog (hDlg, nGood); return TRUE; } case ID_CANCEL: EndDialog(hDlg, -1); return TRUE; } break; } return FALSE; } לש Handle-ה תא םיכירצ ונאש הארנ טעמ דוע .תומדוקה תוינכותהמ תבכרומ רתוי הברה וז תינכות ןייפאמל רבעויו (hInstance) תלבקמ WinMain-ש ןושארה רטמרפב ונל ןתינ הז רטמרפ .windowprocedure עיבצי רשא ילבולג עיבצמ רידגנ ,תינכותב תומוקמ דועב ותוא ךרטצנש ןוויכמ .wndclass-ב אצמנש hInstance :w טקייבואה לא static win *pWin; . . . pWin = &w; .w -> hInstance י"ע וילא סחייתנ ,hInstance-ה לא סחייתהל הצרנשכ ,ךכ case WM_SIZE: case WM_LBUTTONDOWN: { int n = DialogBox (pWin->hInstance, "DWINDOW", hWnd, InputProc); if (n == 2) { char buf[30]; sprintf(buf, "A + B equals %g.", a + b); HDC hDC = GetDC(hWnd); TextOut(hDC, 20, 20, buf, strlen(buf)); ReleaseDC(hWnd, hDC); } else if (n >= 0) MessageBox(hWnd, "Bad input", "Error", MB_OK | MB_ICONSTOP); return 0; } תלבקתמ הנושארה העדוהה .WM_LBUTTONDOWN וא WM_SIZE תעדוה לבקנ רשאכ עצבתי ל"נה דוקה לכ לע ץחול שמתשמה רשאכ תלבקתמ הינשה העדוהה .תצרומ תינכותה רשאכו ןולחה לדוג תא הנשמ שמתשמה רשאכ :רשאכ עצבתי דוקה .רבכעה לש ילאמשה שקמה .תצרומ תינכותה .1 .ןולחה לדוג תא הניש שמתשמה .2 .רבכעה לש ילאמשה ןצחלה לע ץחול שמתשמה .3 לש םשה והז ."DWINDOW" - ינשה רטמרפב טבה .ךסמה לע גצומ חיש-ודה ןולח ,DialogBox היצקנופל ארקנשכ .חיש-ודה ןולחב תלפטמה היצקנופה םש אוה יעיברה רטמרפה .input.rc ץבוקב רהצומש יפכ חיש-ודה ןולח .ךרע הריזחמ DialogBox היצקנופה ,Cancel רותפכה לע וא OK רותפכה לע ץחול שמתשמהשכ :םה םירזחומה םיכרעה .Cancel רותפכה לע ץחל שמתשמה רשאכ - (-1) .OK רותפכה ץחלנו םיינקת אל םה B-ו A םירטמרפה לש םיכרעה רשאכ - 0 .OK רותפכה ץחלנו .ינקת ךרע ליכמ B-ו A-מ דחא קר - 1 .OK רותפכה ץחלנו ינקת ךרע םיליכמ B-ו A םינתשמה ינש - 2 תאצות תא ליכת רשא sprintf היצקופה תרזעב תזורחמ רוצינ .םיינקת םיכרעה ינש םא קר האצותה תא הארנ ונא םירועישב וניארש ומכ .TextOut היצקנופה י"ע buf ךרעמה תא גיצנ .buf ךרעמל התוא סינכנו B-ו A לש םוכסה אל ונאש ןוויכמ .hDC - (ךסמה) יעצמא-רשקה לש Handle-ה תא ונל שי רשאכ קר TextOut-ב שמתשהל לכונ ,םימדוק אורקל ךרטצנ ,ןכל .EndPaint-ו BeginPaint תויצקנופב שמתשהל לכונ אל ,WM_PAINT העדוהה תא םידבעמ .ותוא ררחשל ידכב ReleaseDC היצקנופל ארקנ שומישה רחאל .hDC תא לבקל ידכב GetDC היצקנופל HDC hDC = GetDC(hWnd); . . . ReleaseDC(hWnd, hDC); רותפכה לע ץחלו ןיקת אל דחא ךרע תוחפל סינכה שמתשמה רשאכ 1 וא 0 הריזחמ DialogBox היצקנופה ,וניארש יפכ :האבה הרושה תא ץירנ הז הרקמב .OK MessageBox(hWnd, "Bad input", "Error", MB_OK | MB_ICONSTOP); תא ףרצל הצרנ ,וישכע .העדוה תביתב OK רותפכה תא למסמה MB_OK עובקה לע ונדמל םימדוקה םירועישב ,ןכ ומכ MB_ICONSTOP עובקהו (תויביס לש or) | רוטרפואה י"ע .(הטמל גצומש יפכ) העדוהה תביתל ףרוצמה האיגשה למס .העדוהה תביתל למסה תא ףרצל לכונ ![]() :רבד םוש עצבנ אל הז הרקמבו ,-1 ריזחת DialogBox היצקנופה ,Cancel לע ץחל שמתשמה םא return 0; תארקנה ולש תועדוהב תלפטמה היצקנופל תונווכמ רשא חיש-ודה ןולחל הנחלשית תועדוה ,חיש-ודה ןולח עיפומשכ (דוקימ) סוקופה תא ןווכל ידכב וז העדוהב שמתשנ .WM_INITDIALOG איה הנושארה העדוהה .InputProc ונלש הרקמב םע ארקית InputProc היצקנופה ,Cancel וא OK םירותפכה לע ץחול שמתשמהשכ .A הנתשמה לש טסקטה תבית לא יולת) ID_Cancel וא ID_OK םיעובקל ךרע הווש LOWORD(wParam) ךומנה ךרעה .WM_COMMAND העדוהה .(ץחלנ המ case WM_COMMAND: switch (LOWORD(wParam)) { case ID_OK: { char buffer[16]; int nGood; GetDlgItemText(hDlg, ID_A, buffer, 15); nGood = (sscanf(buffer, "%f", &a) == 1); GetDlgItemText(hDlg, ID_B, buffer, 15); nGood += (sscanf(buffer, "%f", &b) == 1); EndDialog (hDlg, nGood); return TRUE; } case ID_CANCEL: EndDialog(hDlg, -1); return TRUE; } :םה וז היצקנופ לש םירטמרפה .GetDlgItemText היצקנופה י"ע דילקה שמתשמהש טסקטה תא לבקנ .InputProc היצקנופה ךרד חלשנ רשא חיש-ודה ןולח לש Handle-ה - hDlg .input.rc ץבוקב רדגומ רשא (טסקטה תבית) רקבה םש - ID_A .רקבהמ טסקטה סנכוי םשל םיות לש ךרעמ - buffer .רקבהמ הלבקל ילמיסקמה םיותה רפסמ - n sscanf ,ירשפא רבדה םא .(ירשפא הז םא) sscanf היצקנופה י"ע B-ו A םירפסמל תלבקתמה תזורחמה תא רימנ .(רפסמל טסקטה תא רימהל רשפא יא זאו תוא האצמנ לשמל) 0 הריזחמ תרחא 1 ךרע הריזחמ .EndDialog היצקנופב ינשה רטמרפכ nGood הנתשמב סנכנ רשא הרזחה ךרעב שמתשנ EndDialog(hDlg, nGood) .םלענ חיש-וד ןולחה זאו DialogBox היצקנופהמ רזחומ הזה הנתשמה רשאכש אוה ירקיעה קוחה .DialogBox היצקנופה םע רזחוי ,ריזחת EndDialog היצקנופהש ינשה רטמרפה דימת אל רשא WM_INITDIALOG העדוהה איה ללכה ןמ אצויה .False ריזחנ תרחא True ריזחנ העדוהב שמתשהל םיצור ונא .False רזחוי הנממ |