Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];

Вниз

Как на Delphi посредством WIN32API создать MainMenu   Найти похожие ветки 

 
chak_xakep   (2008-03-21 16:42) [0]

Здравствуйте мастера программирования помогите со следующими проблемами:
1.Следует создать MainMenu; - сделал
2.Загрузить в каждый из подпунктов меню Изображение HBITMAP
Ниже приведен мой исходный код главного окна, с процедурой обработки сообщений окна разобрался:

procedure CreateMainWindow;
var
 AMessage: TMsg;
 AWindowClassEx: TWndClassEx;
begin
 MainMenu := CreateMenu;
 AWindowClassEx.cbSize:= sizeOf(TWndClassEx);
 AWindowClassEx.lpszClassName:= WINDOW_CLASS_NAME;
 AWindowClassEx.style:= CS_VREDRAW or CS_HREDRAW;
 AWindowClassEx.hInstance:= HInstance;
 AWindowClassEx.lpfnWndProc:= @HandlerToMainWindow;
 AWindowClassEx.cbClsExtra:= 0;
 AWindowClassEx.cbWndExtra:= 0;
 AWindowClassEx.hIcon:= LoadIcon(hInstance, MakeIntResource("MAINICON"));
 AWindowClassEx.hIconSm:= LoadIcon(hInstance, MakeIntResource("MAINICON"));
 AWindowClassEx.hCursor:= LoadCursor(0, idc_Arrow);
 AWindowClassEx.hbrBackground:= 16;
 AWindowClassEx.lpszMenuName:= nil;
 if RegisterClassEx(AWindowClassEx) = 0
 then
   PostQuitMessage(0)
 else
 begin
   MenuFile:= CreatePopupMenu;
   MenuAbout:= CreatePopupMenu;
   AWindowHandle:= CreateWindowEx(0,
                                  AWindowClassEx.lpszClassName,
                                  WINDOW_TITLE,
                                  DS_MODALFRAME or
                                  WS_MINIMIZEBOX or
                                  WS_CAPTION or
                                  WS_SYSMENU,
                                  ALeft, ATop,
                                  WINDOW_WIDTH, WINDOW_HEIGHT,
                                  0,
                                  MainMenu,
                                  HInstance,
                                  nil);
   CreateMenuItem(MainMenu, MenuFile, "Файл", 0, MENU_FILE, False);
   CreateMenuItem(MenuFile, 0, "Выход", 0, SUBMENU_EXIT, False);
   CreateMenuItem(MainMenu, MenuAbout, "Справка", 0, MENU_ABOUT, False);
   CreateMenuItem(MenuAbout, 0, "О программе...", 0, SUBMENU_ABOUT, False);
   DrawMenuBar(AWindowHandle);
   CreateControls;
   RegisterHotkey(AWindowHandle, 1, MOD_ALT,ord("A"));
   if AWindowHandle = 0
   then
     PostQuitMessage(0)
   else
   begin
     ShowWindow(AWindowHandle, SW_SHOWNORMAL);
     while GetMessage(AMessage, 0, 0, 0) do
     begin
       TranslateMessage(AMessage);
       DispatchMessage(AMessage);
     end; {while}
   end; {else}
 end; {else}
end;

Вопрос, как загрузить картинки на каждый пункт меню??? Пожалуйста дайте хотя бы ссылки на счет этой темы!!!


 
tesseract ©   (2008-03-21 16:49) [1]


> Вопрос, как загрузить картинки на каждый пункт меню??? Пожалуйста
> дайте хотя бы ссылки на счет этой темы!!!


Ты не на API программируешь. А на чём-то странном. На API делаеться через CreateMenu / InsertMenuItem и там есть структура MENUITEMINFO

typedef struct tagMENUITEMINFO {
 UINT    cbSize;
 UINT    fMask;
 UINT    fType;
 UINT    fState;
 UINT    wID;
 HMENU   hSubMenu;
 HBITMAP hbmpChecked;     <-- раз
 HBITMAP hbmpUnchecked;  <-- два
 ULONG_PTR dwItemData;
 LPTSTR  dwTypeData;
 UINT    cch;
 HBITMAP hbmpItem;    
} MENUITEMINFO, *LPMENUITEMINFO;


 
chak_xakep   (2008-03-21 16:53) [2]

tesseract это Сишный код, а пример есть???


 
tesseract ©   (2008-03-21 16:59) [3]

ну вот твоя структура на pascal.

 tagMENUITEMINFOA = packed record
   cbSize: UINT;
   fMask: UINT;
   fType: UINT;             { used if MIIM_TYPE}
   fState: UINT;            { used if MIIM_STATE}
   wID: UINT;               { used if MIIM_ID}
   hSubMenu: HMENU;         { used if MIIM_SUBMENU}
   hbmpChecked: HBITMAP;    { used if MIIM_CHECKMARKS}
   hbmpUnchecked: HBITMAP;  { used if MIIM_CHECKMARKS}
   dwItemData: DWORD;       { used if MIIM_DATA}
   dwTypeData: PAnsiChar;      { used if MIIM_TYPE}
   cch: UINT;               { used if MIIM_TYPE}
   hbmpItem: HBITMAP;       { used if MIIM_BITMAP}
 end;

Если не понял зачем это, возвращайся на VCL или к чтению документации. Потому, как пойдут вопросы про HBITMAP и тп.

ЗЫ: VCL не зря писали.


 
chak_xakep   (2008-03-21 17:03) [4]

О, догнал в эту сторону рыть??? tesseract FOREVER!!!

function CreateMenuItem(hMenu, SubMenu: HMENU; Cap: PChar;
                       _uID, _wID: UINT; Sep: Boolean): Boolean;
var
 Mi: MENUITEMINFO;
begin
 with Mi do
   begin
     cbSize:= SizeOf(Mi);
     fMask:= MIIM_STATE or MIIM_TYPE or MIIM_SUBMENU or MIIM_ID;
     if not Sep
       then fType:= MFT_STRING
       else fType:= MFT_SEPARATOR;
     fState:= MFS_ENABLED;
     wID:= _wID;
     hSubMenu:= SubMenu;
     dwItemData:= 0;
     dwTypeData:= Cap;
     cch:= SizeOf(Cap);
   end;
 Result:= InsertMenuItem(hMenu, _uID, false, Mi);
end;

tesseract УВАЖУХА!!! <br>


 
{RASkov} ©   (2008-03-21 17:13) [5]

> tesseract FOREVER!!!

> tesseract УВАЖУХА!!!


> tesseract ©

О как... подфорсило :)


 
tesseract ©   (2008-03-21 17:18) [6]


> О как... подфорсило :)


Бывает :-) хорошо что на MFC под delphi не пишут :-)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
4-1203884779
art36
2008-02-24 23:26
2009.02.22
устройство веб камеры + видео поток + delphi


2-1231757559
Программер
2009-01-12 13:52
2009.02.22
Как выделить item в listbox?


2-1231927823
smartleds
2009-01-14 13:10
2009.02.22
Уважаемый All, есть процедура FormCreate поясните как


2-1231532495
Б
2009-01-09 23:21
2009.02.22
TList


15-1230107338
xayam
2008-12-24 11:28
2009.02.22
У нас этого много





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский