Держите окно, полученное из CView, всегда сверху

Я хочу подражать поведению модального diaolg в моем листе свойств, чтобы он всегда оставался сверху, и никакие другие действия из соответствующего листа не могут быть предприняты, пока лист не будет закрыт.
У меня есть следующая структура класса;

class ViewPSheet : public CView
{
protected:
ViewPSheet();
DECLARE_DYNCREATE(ViewPSheet)

// Overrides
public:
virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);
protected:
virtual void OnDraw(CDC* pDC);  // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
virtual void OnInitialUpdate(); // called first time after construct
virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
virtual void OnActivateFrame(UINT nState, CFrameWnd* /*pFrameWnd*/);

// Generated message map functions
protected:
afx_msg void OnDestroy();
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
DECLARE_MESSAGE_MAP()
};class SheetDim : public ViewPSheet
{
protected:
SheetDim();           // protected constructor used by dynamic creation
DECLARE_DYNCREATE(SheetDim)

// Operations
public:
protected:
virtual void OnInitialUpdate(); // called first time after construct
virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);

protected:
virtual ~SheetDim();

public:
void OnApplyNow();
void OnCancel();
void OnOK();

// Generated message map functions
protected:
DECLARE_MESSAGE_MAP()
};

SheetDimclass действует как держатель страницы свойств и имеет несколько классов CPropertyPage, добавленных в OnInitialUpdate ().
Я попытался использовать следующие методы, чтобы получить правильную таблицу, в том числе попробовать закомментированные строки.

void SheetDim::OnActivateView(
BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
{
ViewPSheet::OnActivateView(bActivate, pActivateView, pDeactiveView);
if (bActivate == WA_INACTIVE)
{
::SetWindowPos( this->GetParent()->m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE );
//::SetWindowPos( this->GetParent()->m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
//::SetWindowPos( this->m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
}
}

Но не мог заставить надлежащую таблицу вести себя как немодальный диалог. Есть ли способ достичь этого без изменения родительского класса ViewPSheet?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]