Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > не работает GetMenuString в WM_DRAWITEM


Автор: Dmitry_177 21.1.2007, 00:59
не работает GetMenuString в WM_DRAWITEM, может сталкивался ктонибудь с этой проблемой? В обработке WM_DRAWITEM делаю так:

Код

var
 Buffer: string;
 BufSize: integer;
begin
 case Message of
   WM_DRAWITEM: begin
                  with PDrawItemStruct(lParam)^ do
                    begin
                      SetLength(Buffer, MAX_PATH);
                      BufSize := GetMenuString(hwndItem, itemID, PChar(Buffer), MAX_PATH, MF_BYCOMMAND);
                      SetLength(Buffer, BufSize);

...


в переменную Buffer почему-то ничего не записывается...(((


Автор: Dmitry_177 21.1.2007, 02:27
Может это из за того что я создаю меню так:

Код

  hMainMenu := CreateMenu;
  hSubMenuFile := CreatePopupMenu;
  hSubMenuHelp := CreatePopupMenu;

  AppendMenu(hMainMenu, MF_OWNERDRAW or MF_POPUP, hSubMenuFile, '&File');
  AppendMenu(hMainMenu, MF_OWNERDRAW or MF_POPUP, hSubMenuHelp, '&Help');

  AppendMenu(hSubMenuFile, MF_ENABLED or MF_STRING, sflNew, 'New');
  AppendMenu(hSubMenuFile, MF_ENABLED or MF_STRING, sflClose, 'Close');
  AppendMenu(hSubMenuFile, MF_SEPARATOR, 0, '');
  AppendMenu(hSubMenuFile, MF_ENABLED or MF_STRING, sflExit, 'Exit');
...


Может это из за того что какраз у пунктов меню в главном меню нету по сути дела itemID, точнее не определен в этом создании? 

Автор: Snowy 21.1.2007, 11:11
Цитата(Dmitry_177 @  21.1.2007,  00:59 Найти цитируемый пост)
BufSize := GetMenuString(hwndItem, itemID, PChar(Buffer), MAX_PATH, MF_BYCOMMAND);
Цитата(Dmitry_177 @  21.1.2007,  00:59 Найти цитируемый пост)
в переменную Buffer почему-то ничего не записывается...(((
Потому что
Код
BufSize := GetMenuString(hwndItem, itemID, PChar(Buffer), 0, MF_BYCOMMAND);


Автор: Dmitry_177 21.1.2007, 14:58
Пробовал, что-то никак... smile И так еще пробовал:
Код

var
  Buffer: array [0..MAX_PATH - 1]of Char;
  text: string;
begin
  case Message of
    WM_DRAWITEM: begin
                   with PDrawItemStruct(lParam)^ do
                     begin
                       GetMenuString(hwndItem, itemID, Buffer, length(Buffer), MF_BYCOMMAND);
                       text := Buffer;

                       ...

                       DrawText(hDC, PChar(text), length(text), rcItem, DT_CENTER or DT_VCENTER or DT_SINGLELINE);

Автор: Voyager 22.1.2007, 12:57
GetMenuItemInfo

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)