ndowExW (WS_EX_CLIENTEDGE, L RICHEDIT50W , , WS_VISIBLE | WS_CHILD | ES_MULTILINE, 10, 10, 300, 300, hWnd, (HMENU) 10 ,, NULL);
... (! edit)
{(hWnd, e , e , MB_OK);
return 0;
}
Потім потрібно прописати саме меню верхнього рівня в мітках case. Воно прописується в самій віконної процедурою, тобто в черзі повідомлень. Щоб прописати мітку, що має назву створеної константи, необхідно спочатку створити мітку з назвою WM_COMMAND і в неї вставити окремий switch з параметром LOWORD (wparam) і в ньому прописувати мітки-константи для меню верхнього рівня. Мітка IDM_Enable_Disable перемикає меню вихід, мітки case IDP_Open і IDP_Save призначені для відкриття та збереження текстового файлу, мітка IDP_Print відповідно для роздруківки документів. У меню Правка входять такі мітки як: IDP_Undo, IDP_Cut, IDP_Copy, IDP_Paste і IDP_Find. У меню Вставка входять наступні мітки: IDP_Datetime, IDP_Symbol, IDP_Alpha, IDP_Sigma=19 і IDP_Omega. У меню Формат входить мітка IDP_Font, а в меню Довідка - IDP_Help. Мітка WM_Notifi використовується в якості допоміжної мітки для скасування дії а також вона взаємопов'язана з класом Undo.
. Опис меню верхнього рівня
Для того, щоб прописати всі підпункти меню верхнього рівня, потрібно в першу чергу створити конструкцію з міткою WM_COMMAND, що має вигляд:
... WM_COMMAND:
{(LOWORD (wParam))
{
//Всі мітки меню і підменю
... ... ...
}
}
...
Кожне меню або підменю описується у своїй мітці case.
Меню Файл.
Це меню складається з пунктів: Відкрити, Зберегти, Друк, Включити/виключити вихід, Вихід.
Кожен підпункт меню описується відповідним класом, вбудованим в саму бібліотеку даного компілятора
case IDP_Open: {
//Відкриття файлаfilename [300]; [0]=0; of; .lStructSize=sizeof (of) ;. hwndOwner=hWnd; .hInstance=hInst; .lpstrFilter= texts files 0 * .txt 0 0 raquo ;;. lpstrCustomFilter=NULL; .nMaxCustFilter=0; .nFilterIndex=1; .lpstrFile=filename; .nMaxFile=sizeof (filename) ;. lpstrFileTitle=NULL; .nMaxFileTitle=0; .lpstrInitialDir =NULL; .lpstrTitle= Відкриття файлу raquo ;;. Flags=OFN_FILEMUSTEXIST; .lpstrDefExt= bmp raquo ;;. lCustData=0; .lpfnHook=NULL; .lpTemplateName=NULL; result=GetOpenFileName ( amp; of); ( ! result)
{(hWnd, Error , Помилка , MB_OK) ;;
} f; .open (filename) ;. seekg (0, f.end); size=f.tellg () ;. seekg (0, f.beg); * m=new char [size] ;. read (m, size); (edit, m); (edit); m;
}; IDP_Save :() ;; IDP_Print:
{print_dlg={0}; _ dlg.lStructSize=sizeof (print_dlg); _ dlg.Flags=PD_RETURNDC; result=PrintDlg ( amp; print_dlg); (! result)
{(hWnd, Print Error raquo ;, Чи не видає друк raquo ;, MB_OK);
break;
}
//Висновок тестового тексту на принтер
HDC hdc=print_dlg.hDC; di={sizeof (di)} ;. lpszDocName= qqq.txt raquo ;;
//Підключення до RichEdit (hdc, amp; di); (edit, EM_SETTARGETDEVICE, (WPARAM) hdc, 0); (hdc); (edit, EM_SETSEL, 0, - 1);// Виділити всёfr; .hdc=hdc; .hdcTarget=hdc; .rcPage.left=0; .rcPage.right=100; .rcPage.top=0; .rcPage.bottom=100;(edit,EM_EXGETSEL,0,(LPARAM)amp;frrg);(edit,EM_FORMATRANGE,TRUE,(LPARAM)amp;fr);(hdc);(hdc);
};IDM_Exit:(hWnd,WM_CLOSE,NULL,NULL);;IDM_Enable_Disable:(hFileMenu,IDM_Exit,MF_BYCOMMAND | nFlag);=(nFlag==MF_ENABLED)?MF_GRAYED:MF_ENABLED;=(nIndex==0)?1:0;(hFileMenu,IDM_Enable_Disable,MF_BYCOMMAND|_STRING,IDM_Enable_Disable,pContent[nIndex]);
break;
Меню Правка. Це меню складається з підпунктів: Скасувати, Вирізати, Копіювати, Вставити, Знайти. Для скасування останньої дії використовується клас Undo, який називається стеком. Мітка IDP_Undo посилається на цей клас через покажчик-посилання.
case IDP_Undo:
{* m=undo.removecopy (); (edit, m); (edit); [] m;
}; IDP_Cut: SendMessage (edit, WM_CUT, 0,0) ;; IDP_Copy: SendMessage (edit, WM_COPY, 0,0) ;; IDP_Paste: SendMessage (edit, WM_PASTE, 0,0) ;; IDP_Find:
{.hInstance=hInst;.lStructSize=sizeof(find);.hwndOwner=hWnd;.Flags=FR_DOWN|FR_NOMATCHCASE;.lpstrFindWhat=str;.wFindWhatLen=200;.lpstrReplaceWith=NULL;.wReplaceWithLen=0;.lCustData=0;.lpfnHook=NULL;.lpTemplat...