Дескриптор окна
А если такой функции нет, может ещё какое решение есть?
Цитата:
Originally posted by _ngel
У меня проблема, надо найти дескриптор окна по дескриптору меню, которое к нему подключено. Дескриптор меню я знаю. Плиз, кто знает подскажите функцию, а то я почти весь MSDN перерыл и ничего не нашёл.
А если такой функции нет, может ещё какое решение есть?
У меня проблема, надо найти дескриптор окна по дескриптору меню, которое к нему подключено. Дескриптор меню я знаю. Плиз, кто знает подскажите функцию, а то я почти весь MSDN перерыл и ничего не нашёл.
А если такой функции нет, может ещё какое решение есть?
А как ты узнаешь дескриптор меню?
HDC GetDC(HWND hWnd);
соответстенно нужно знать дескриптор того окна на котором я рисую меню.
P.S.
А дескриптор меню хранится в самом классе в
HMENU m_hMenu;
Цитата:
Originally posted by _ngel
Объясню подробнее: Я переписал класс CMenu, и пытаюсь переписать функцию MeasureItem, там требуется Контекст устройства (HDC), для ручной отрисовки меню. Он может быть получен функцией
HDC GetDC(HWND hWnd);
соответстенно нужно знать дескриптор того окна на котором я рисую меню.
P.S.
А дескриптор меню хранится в самом классе в
HMENU m_hMenu;
Объясню подробнее: Я переписал класс CMenu, и пытаюсь переписать функцию MeasureItem, там требуется Контекст устройства (HDC), для ручной отрисовки меню. Он может быть получен функцией
HDC GetDC(HWND hWnd);
соответстенно нужно знать дескриптор того окна на котором я рисую меню.
P.S.
А дескриптор меню хранится в самом классе в
HMENU m_hMenu;
Я вообще мало разбираюсь в MVС (сам я борладнский), но разве при создания меню не нужно указывать родителя меню? Пусть в конструктор передаётся дескриптор окна.
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
if(GetMenu(hwnd)==*(HMENU*)lParam)
{
*(HWND*)lParam=hwnd;
return FALSE;
}
return TRUE;
}
//функция возвращяет хэндл окна если нашла окно котому принадлежит меню или ноль если ничего не нашла
HWND FindWndByMenu(HMENU hmn)
{
HWND hm=(HWND)hmn;
EnumWindows(EnumWindowsProc,(LPARAM)&hm);
if(hm==(HWND)hmn) return 0;
return hm;
}
Или создать дополнительное свойство
Как в бильдере например, MainMemu1->Parent....
Цитата:
Originally posted by 3D Bob
Оно наверное и будет работать как нужно... Но разве поиск, это не лишняя трата ресурсов... Меню на мой взгяд при создании, должно знать кто его создает...
Или создать дополнительное свойство
Как в бильдере например, MainMemu1->Parent....
Оно наверное и будет работать как нужно... Но разве поиск, это не лишняя трата ресурсов... Меню на мой взгяд при создании, должно знать кто его создает...
Или создать дополнительное свойство
Как в бильдере например, MainMemu1->Parent....
Это тебе не Билдер...
Цитата:
Originally posted by vitaly2003s
Можно попробовать такое извращение:
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
if(GetMenu(hwnd)==*(HMENU*)lParam)
{
*(HWND*)lParam=hwnd;
return FALSE;
}
return TRUE;
}
//функция возвращяет хэндл окна если нашла окно котому принадлежит меню или ноль если ничего не нашла
HWND FindWndByMenu(HMENU hmn)
{
HWND hm=(HWND)hmn;
EnumWindows(EnumWindowsProc,(LPARAM)&hm);
if(hm==(HWND)hmn) return 0;
return hm;
}
Можно попробовать такое извращение:
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
if(GetMenu(hwnd)==*(HMENU*)lParam)
{
*(HWND*)lParam=hwnd;
return FALSE;
}
return TRUE;
}
//функция возвращяет хэндл окна если нашла окно котому принадлежит меню или ноль если ничего не нашла
HWND FindWndByMenu(HMENU hmn)
{
HWND hm=(HWND)hmn;
EnumWindows(EnumWindowsProc,(LPARAM)&hm);
if(hm==(HWND)hmn) return 0;
return hm;
}
Это извращение: перебирать все окна пока не найдешь нужное, уж лучше просто хранить HWND в моем классе, может в винде есть встроенная функция?
Цитата:
Originally posted by _ngel
Это извращение: перебирать все окна пока не найдешь нужное, уж лучше просто хранить HWND в моем классе, может в винде есть встроенная функция?
Это извращение: перебирать все окна пока не найдешь нужное, уж лучше просто хранить HWND в моем классе, может в винде есть встроенная функция?
Да нет такой функции.