Похоже, вы не можете видеть окно, созданное из-за использования GetDesktopWindow, чтобы установить его родитель. Проверьте, будут ли следующие изменения в вашем коде работать нормально, следует создать список из 3 элементов, и вы сможете закрыть его или переместить его в диалоговом окне.
BOOL CYourDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ListBox.CreateEx(WS_EX_STATICEDGE | WS_EX_TOOLWINDOW, _T("LISTBOX"), NULL,
WS_CHILD | WS_CAPTION | LBS_STANDARD | WS_HSCROLL | WS_SYSMENU | WS_VISIBLE,
CRect(50, 100, 200, 200), this, 1);
m_ListBox.AddString(L"one");
m_ListBox.AddString(L"two");
m_ListBox.AddString(L"three");
return true;
}
Также я полагаю, что вы хотели бы рассмотреть возможность использования панелей управления для реализации закрепления \ плавающей функции для вашего окна.
update0 всплывающее окно со списком
class CPopUpTest : public CFrameWnd
{
private:
CListBox* m_ListBox;
public:
CPopUpTest();
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnSize(UINT nType, int cx, int cy);
};
CPopUpTest::CPopUpTest()
{
m_ListBox = NULL;
Create(NULL, L"Pop up listbox test", WS_POPUPWINDOW | WS_CAPTION | WS_SIZEBOX,
CRect(400, 280, 580, 520), NULL, NULL, WS_EX_TOOLWINDOW);
CRect rect;
GetClientRect(&rect);
m_ListBox = new CListBox();
m_ListBox->Create(WS_CHILD | WS_VISIBLE | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | LBS_SORT | WS_VSCROLL, rect, this, 1);
m_ListBox->AddString(L"one");
m_ListBox->AddString(L"two");
m_ListBox->AddString(L"three");
m_ListBox->AddString(L"four");
}
BEGIN_MESSAGE_MAP(CPopUpTest, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CPopUpTest::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
if (m_ListBox!=NULL) m_ListBox->MoveWindow(0, 0, cx, cy);
}
Затем, когда вы хотите показать это окно, выполните:
CPopUpTest* popUpList = new CPopUpTest();
popUpList->ShowWindow(SW_NORMAL);
popUpList->BringToTop(SW_NORMAL);
надеюсь, это поможет, с уважением