TrackPopupMenu. Проблема полного отображения меню.
От: alexsvk  
Дата: 09.09.11 19:58
Оценка:
Приведу код:

...
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    HBRUSH shape_brush, old_brush;
    RECT rc;
    static HMENU main_menu; 
    static HMENU shape_contextmenu, colour_contextmenu;
    static BOOLEAN show_shape;
    static ShapeData shape_data;
    static TCHAR* idm_resize_value [] = { _T("Decrease!"), _T("Increase!") };
    static const int W = 200, H = 100;
    int x0, y0, x1, x2, y1, y2;
    std::basic_string<TCHAR> msg;
    int brightness;
    POINT pt[4]; // for rhomb
    POINT ptInScreen, ptInClient;

    switch(uMsg)
    {
    case WM_CREATE:
        main_menu = GetMenu(hWnd);
        shape_contextmenu = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MENU_SHAPECONTEXT));
        //shape_contextmenu = GetSubMenu(shape_contextmenu, 0);
        colour_contextmenu = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MENU_COLOURCONTEXT));
        //colour_contextmenu = GetSubMenu(colour_contextmenu, 0);

        SetMenuDefaultItem(GetSubMenu(main_menu, 0), IDM_OPEN, FALSE);
        CheckMenuRadioItem(GetSubMenu(main_menu, 1), IDM_SHOW, IDM_HIDE, IDM_SHOW, MF_BYCOMMAND);
        CheckMenuRadioItem(shape_contextmenu, ID_RECTANGLE, ID_RHOMB, ID_RECTANGLE, MF_BYCOMMAND);
        CheckMenuRadioItem(colour_contextmenu, ID_DARK, ID_LIGHT, ID_DARK, MF_BYCOMMAND);

        show_shape = TRUE;
        shape_data.id_shape = ID_RECTANGLE;
        shape_data.intensity = ID_DARK;
        shape_data.shapeSize = ShapeData::MIN;
        break;

    case WM_CONTEXTMENU:
        ptInScreen.x = LOWORD(lParam);
        ptInScreen.y = LOWORD(lParam);
        ptInClient = ptInScreen;
        ScreenToClient(hWnd, &ptInClient);
        GetClientRect(hWnd, &rc);

        if( ptInClient.x < rc.right / 2 )
            TrackPopupMenu(shape_contextmenu, 0, ptInScreen.x, ptInScreen.y, 0, hWnd, NULL);
        else
            TrackPopupMenu(colour_contextmenu, 0, ptInScreen.x, ptInScreen.y, 0, hWnd, NULL);
        break;
...


В результате отображается контекстное меню в виде прямоугольника (см. справа налево) шириной в несколько пикселей и длиной (высотой), соответствующей длине(высоте) при создании в редакторе меню. При этом пункты меню отрабатывают команды.
Re: TrackPopupMenu. Проблема полного отображения меню.
От: kero Россия  
Дата: 09.09.11 21:01
Оценка:
Здравствуйте, alexsvk, Вы писали:

A>В результате отображается контекстное меню в виде прямоугольника (см. справа налево) шириной в несколько пикселей и длиной (высотой), соответствующей длине(высоте) при создании в редакторе меню. При этом пункты меню отрабатывают команды.


И где же надо см. справа налево ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[2]: TrackPopupMenu. Проблема полного отображения меню.
От: alexsvk  
Дата: 10.09.11 07:25
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, alexsvk, Вы писали:


A>>В результате отображается контекстное меню в виде прямоугольника (см. справа налево) шириной в несколько пикселей и длиной (высотой), соответствующей длине(высоте) при создании в редакторе меню. При этом пункты меню отрабатывают команды.


K>И где же надо см. справа налево ?


Проблему решил добавлением фиктивного пункта-подменю.
Kero, представьте себе контекстное меню, отображаемое на рабочем столе после клика правой кнопкой мыши. если посмотреть на этот прямоугольник справа налево, то первоочередная высота контекстного меню станет длиной.
Re[3]: TrackPopupMenu. Проблема полного отображения меню.
От: kero Россия  
Дата: 10.09.11 07:50
Оценка:
Здравствуйте, alexsvk, Вы писали:

A>>>В результате отображается контекстное меню в виде прямоугольника (см. справа налево) шириной в несколько пикселей и длиной (высотой), соответствующей длине(высоте) при создании в редакторе меню. При этом пункты меню отрабатывают команды.


K>>И где же надо см. справа налево ?


A>Проблему решил добавлением фиктивного пункта-подменю.

A>Kero, представьте себе контекстное меню, отображаемое на рабочем столе после клика правой кнопкой мыши. если посмотреть на этот прямоугольник справа налево, то первоочередная высота контекстного меню станет длиной.

alexsvk, не понял ни слова, так и задумано?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[4]: TrackPopupMenu. Проблема полного отображения меню.
От: alexsvk  
Дата: 10.09.11 11:33
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, alexsvk, Вы писали:


A>>>>В результате отображается контекстное меню в виде прямоугольника (см. справа налево) шириной в несколько пикселей и длиной (высотой), соответствующей длине(высоте) при создании в редакторе меню. При этом пункты меню отрабатывают команды.


K>>>И где же надо см. справа налево ?


A>>Проблему решил добавлением фиктивного пункта-подменю.

A>>Kero, представьте себе контекстное меню, отображаемое на рабочем столе после клика правой кнопкой мыши. если посмотреть на этот прямоугольник справа налево, то первоочередная высота контекстного меню станет длиной.

K>alexsvk, не понял ни слова, так и задумано?

Склонив голову на левое плечо, можно увидеть прямоугольник (контекстное меню) с другого ракурса
Re[5]: TrackPopupMenu. Проблема полного отображения меню.
От: GrayWolf Россия https://kini24.ru
Дата: 10.09.11 15:52
Оценка:
Здравствуйте, alexsvk, Вы писали:

A>Склонив голову на левое плечо, можно увидеть прямоугольник (контекстное меню) с другого ракурса


Т.е. ты "перепутал" координатные сетки? Я правильно понял? Одну ось с другой?
Re: TrackPopupMenu. Проблема полного отображения меню.
От: CEMb  
Дата: 11.09.11 07:30
Оценка:
Здравствуйте, alexsvk, Вы писали:

A>В результате отображается контекстное меню в виде прямоугольника (см. справа налево) шириной в несколько пикселей и длиной (высотой), соответствующей длине(высоте) при создании в редакторе меню. При этом пункты меню отрабатывают команды.


Блин, у меня тоже постоянно такая фигня случается, и я постоянно забываю причину
WM_MEASUREITEM может надо обработать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.