У меня проблемы с созданием прозрачного CDockablePane / CDialog / CPaneDialog - PullRequest
0 голосов
/ 22 января 2020

вот проблема, которая у меня есть. я получил класс CPaneDialog

class CDroView : public CPaneDialog
{
    DECLARE_DYNAMIC(CDroView)

public:
    CDroView();
    virtual ~CDroView();

protected:
    DECLARE_MESSAGE_MAP()
public:

    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
};

Я хочу, чтобы фон этого диалога был прозрачным и показывал, что за этим стоит. Я могу выполнить sh, используя следующий код:

int CDroView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CPaneDialog::OnCreate(lpCreateStruct) == -1)
        return -1;

    SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE) ^ WS_EX_LAYERED);
    SetLayeredWindowAttributes(RGB(255,0,255),0, LWA_COLORKEY);

    // TODO:  Add your specialized creation code here

    return 0;
}


BOOL CDroView::OnEraseBkgnd(CDC* pDC)
{
    // TODO: Add your message handler code here and/or call default

     CRect clientRect ;

     GetClientRect(&clientRect) ;

     pDC->FillSolidRect(clientRect, RGB(255,0,255)) ;  // paint background in magenta

     return FALSE;

}

Вот так выглядит диалоговое окно в режиме Popup : TransParent Dialog

Проблема в том, что, как только я пытаюсь переместить / изменить размер / закрепить это диалоговое окно, программа вылетает, и я получаю это сообщение об ошибке: «Необработанное исключение в 0x51e8b340 (mfc100d.dll) в 3DNavigator.exe: 0xC0000005 : Место чтения нарушения доступа 0x00000000. "

ошибка отображается в этой строке внутри метода CPane :: FloatPane (CRect rectFloat, AFX_DOCK_METHOD dockMethod, bool bShow) внутри afxpane. cpp файл:

if (bShow)
    {
        GetParentMiniFrame()->AdjustLayout();
    }

Сообщение об ошибке при попытке переместить диалог

Теперь вот где это становится странным. если я изменю стиль диалога на дочерний вместо всплывающее , изображенное здесь: дочерний стиль Теперь я могу свободно перемещать, изменять размер и даже закреплять этот диалог без каких-либо сбой, НО ... прозрачность больше не работает, и диалог выглядит так: дочерний диалог

Так что мне нужно либо решить проблему с разрешением перемещения или изменения размера диалога / закреплена в режиме Popup , ИЛИ заставляя код Dialog Transparency работать в режиме Child . есть идеи, почему существует какая-либо из этих проблем? спасибо

...