![]() |
|
ךשמה - םיטירפת - C/C++ | |
![]() |
|
ישאר דומע | םיניינע ןכות | סינוקא ןד תאמ |
![]() |
:םדוקה רועישהמ טירפתל םירבד המכ ףיסונ םעפה .רישי ןפואב טירפת תייצפוא תלעפהל ךרד ירוציקב שומיש .1 .CheckMenuItem היצקנופה י"ע v-ב טירפת תייצפוא ןמסל תורשפא .2 .EnableMenuItem היצקנופה י"ע טירפת תייצפוא ןומיס לטבל תורשפא .3 .טירפתב תונושה תויצפואה ןיב דירפמ וק .4 .םישקמ ףוריצ י"ע טירפת תייצפואב רישי ןפואב רוחבל תורשפאה ונל תנתינ תובורק םיתיעל :םיאבה ךרדה ירוציק תא עצבנ ונחנא .(דנלרוב רדהמב תינכות ץירמה Ctrl-F9-ל המודב)
הטמל אמגודב ומכ .הילא ךרדה רוציק תא טירפתה תייצפוא דצל הארי שמתשמהש הצרנ ,ףסונב :(הריחבל תנתינ אל רשא תלטובמ טירפת תייצפוא םג םיאור ונא) ![]() .menus.rc ץבוקב ךרד ירוציק תלבט רוצינ MyAccel ACCELERATORS { VK_F5, IDM_LAND, VIRTKEY VK_F5, IDM_SEA, VIRTKEY, CONTROL VK_INSERT, IDM_TREES, VIRTKEY VK_INSERT, IDM_BLOEMEN, VIRTKEY, SHIFT, ALT } .ןהילא ךרדה ירוציק תא שמתשמה ינפב גיצהל ידכב טירפתה תויצפואב עיפומה טסקטה תא תונשל םיבייח ונא :לשמל MENUITEM "&Sea\aCtrl+F5", IDM_SEA .טירפתב ןימיל דמצוי ונימימ טסקטהו לאמשל דמצוי ולאמשמ טסקטה .וירחאו וינפלש טסקטה תא דדובמ "\a" ףוריצה האבש הלימה לע עיבצנ הז ליבשב .תינכותל תאז רשקל ונילע ךא ,הפיו בוט הז ךרדה ירוציק תא טירפתב ונמשרש הז :ךכ WinMain היצקנופב וזה הלימה תא םישנ .(MyAccel ונלש הרקמב) ACCELERATORS הלימה ינפל w.wndclass.lpszMenuName = "Examplemenu"; w.szAccel = "MyAccel"; .NULL יתלחתהה ךרעה תא szAccel ןייפאמל הנתנ הנובה היצקנופה ,WinMain היצקנופב w טקייבואה תא ונרדגהשכ .הז ךרע תא וניניש ונא ךרדה ירוציק לש Handle-ה יזא ,ןכ םא .NULL-מ הנוש szAccel ןייפאמה םאה קודבנ result היצנקופב .NULL-מ הנוש ןכ םג (hAccel) :result היצנקופה י"ע MyAccel הלימב םישמתשמ ךיא הארנ int win::result() { ... HACCEL hAccel = (szAccel ? LoadAccelerators(hInstance, szAccel) : 0); while (GetMessage(&msg, NULL, 0, 0)) { if (hDlg == 0 || !IsDialogMessage(hDlg, &msg)) { if (hAccel == 0 || !TranslateAccelerator(hWnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } } return msg.wParam; } הלימה תבותכש ןוויכמ .NULL-ל הווש hDlg ,זא דע .כ"חא התוא ריבסא .hDlg-ב םישמתשמ הב הרושהמ םלעתנ לש Handle-הו תארקנ LoadAccelerators היצקנופה ,(NULL-מ הנוש איה ןכלו) szAccel ןייפאמב תאצמנ MyAccel .TranslateAccelerator היצקנופה ארקית ,הז ללגב .NULL-מ הנוש היהי (hAccel) ךרדה ירוציק .[היצקנופה תארקנ התייה אל ןכל .( || ) "וא" יאנת הפ שיש ינפמ םייקתמ רבכ היה יאנתה ,0-ל הווש היה hAccel םא] תויצקנופה תוארקנ זאו םייקתהל ולוכ יאנתל םורגי "!" רוטרפואה ,0 הריזחמ TranslateAccelerator היצקנופהשכ .DispatchMessage-ו TranslateMessage .ךשמהב תאז ןיבת - הגאד לא ךא ןושאר טבממ תאז ןיבהל השקש עדוי ינא :תינכותה הנה //menus1.cpp: Demonstration of a menu, with add-ons // Links with win.obj and resource-script-file menus1.rc #include "win.h" #include "menus1.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { win w(hInstance, iCmdShow, "menus1", "menu1: Accelerators, checked menu's, gray items, and a seperator"); w.wndclass.lpszMenuName = "ExampleMenu"; w.szAccel = "MyAccel"; return w.result(); } LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch (iMsg) { case WM_COMMAND: { HMENU hMenu = GetMenu (hWnd); for (UINT i=IDM_LAND; i<=IDM_INSECTS; i++) CheckMenuItem (hMenu, i, (i==wParam ? MF_CHECKED: MF_UNCHECKED)); EnableMenuItem(hMenu, IDM_INSECTS, MF_GRAYED); switch (LOWORD(wParam)) { case IDM_LAND: MessageBox (hWnd, "Horse, Dog, Cat", "Land", MB_OK); break; case IDM_SEA: MessageBox (hWnd, "Fish, Shark, Alligator", "Sea", MB_OK); break; case IDM_TREES: MessageBox (hWnd, "Some trees", "Trees", MB_OK); break; case IDM_FLOWERS: MessageBox (hWnd, "Some flowers", "Flowers", MB_OK); break; } return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, iMsg, wParam, lParam); } :תרתוכה ץבוק הנה //MENUS1.H #define IDM_LAND 1001 #define IDM_SEA 1002 #define IDM_TREES 1003 #define IDM_FLOWERS 1004 #define IDM_INSECTS 1005 :(rc ץבוק) באשמל דוק ץבוק //MENUS1.RC: #include <windows.h> #include "menus1.h" ExampleMenu MENU { POPUP "&Animals" { MENUITEM "&Land\aF5", IDM_LAND MENUITEM "&Sea\aCtrl+F5", IDM_SEA MENUITEM SEPARATOR MENUITEM "&Insects", IDM_INSECTS } POPUP "&Plants" { MENUITEM "T&rees\aIns", IDM_TREES MENUITEM "Fl&owers\aShift+Alt+Ins", IDM_FLOWERS } } MyAccel ACCELERATORS { VK_F5, IDM_LAND, VIRTKEY VK_F5, IDM_SEA, VIRTKEY, CONTROL VK_INSERT, IDM_TREES, VIRTKEY VK_INSERT, IDM_FLOWERS, VIRTKEY, SHIFT, ALT } .הריחבה תא לטבל ןכו v י"ע טירפת תיצפוא רוחבל תורשפאה תא ונל תנתונ CheckMenuItem היצקנופה תא .ןושאר רטמרפכ טירפתה לש Handle-ה תא תוכירצ EnableMenuItem-ו CheckMenuItem תויצקנופה :האבה הרוצב ןולחה לש Handle-ה םע ארקנש ךכ י"ע גישנ הזה Handle-ה HMENU hMenu; hMenu = GetMenu(hWnd); :לשמל בותכנ ,תמייוסמ טירפת תייצפוא ןמסל הצרנשכ CheckMenuItem(hMenu, IDM_FLOWERS, MF_CHECKED); :ךכ תאז עצבנ ,ןומיסה תא דירוהל הצרנשכ CheckMenuItem(hMenu, IDM_FLOWERS, MF_UNCHECKED); :ךכ תאז השענ .תורחאה תויצפואה לכ תריחב תא תלטבמ איה ,תרחבנ הייצפוא רשאכש הצרנ כ"רדב UNIT i; HMENU hMenu; ... case WM_COMMAND: hMenu = GetMenu(hWnd); for (i=IDM_LAND; i<=IDM_INSECTS; i++) CheckMenuItem (hMenu, i, (i == wParam ? MF_CHECKED : MF_UNCHECKED) ); תרזעב םיעובקה לכ לע רובעל לכונ ,1-ב םעפ לכ םילדג ראשה לכו ,1001-ל הווש IDM_LAND עובקהש ןוויכמ :ךכ .היצפוא לטבל/ןמסל ידכ ישילשה רטמרפב שמתשנ זא .הטושפ האלול (i == wParam ? MF_CHECKED : MF_UNCHECKED) ,הווש אוה םא .אל וא ול הווש עובקה םא םיקדוב ונא האלולב .שמתשמה י"ע תרחבנה היצפואה איה wParam .(MF_UNCHECKED) לטובת הייצפואה ,אל םאו (MF_CHECKED) רחבית הייצפואה EnableMenuItem היצקנופה לכו הרופא גצות הייצפואה .שמתשמה י"ע רחביהל לכות אלו תינמז לטובת תמייוסמ טירפת תייצפואש הצרנ םימעפל .הב רוחבל תורשפאה תא הרזחב תתל הצרנ םגש ןבומכ .יוניש םושל םורגת אל הילע הציחל :הרושה י"ע תלטובמ Insects הייצפואה ,ונלש תינכותב EnableMenuItem (hMenu, IDM_INSECTS, MF_GRAYED); :הרושה תא ליעפנ הרזחב התוא רשפאל ידכב EnableMenuItem (hMenu, IDM_INSECTS, MF_ENABLED); תויצפוא ןיב (Seperators) םידירפמ םיוק קלוחמ "ץבוק" טירפת ,WORD םילילמתה דבעמב ,אמגודל .יקפוא וק י"ע תויצפוא תצובק ןיב דירפהל תולקב רשפא טירפתה תויצפוא ןיב האבה הרושה י"ע םושייל לק הז גוסמ יקפוא וק .יקפוא וק י"ע תודרפומה תוירוגטק המכל :rc-ה ץבוקב MENUITEM SEPARATOR |