它看起來就像你不能看到窗口創建由於使用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;
}
此外,我相信你會考慮使用control bars實現對接\浮動functinality爲你的窗口。與列表框
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);
希望這會有所幫助,至於
我覺得你應該把控制在工具欄或對話框裏面創建。我相信你會在codeguru.com上找到一個例子! – dwo 2010-01-05 21:11:37
這不是一個回答你的問題,但你不希望將COLOR_WINDOW轉換爲一個HBRUSH在調用AfxRegisterClass - 使用GetSystemColorBrush(COLOR_WINDOW)來代替。 – 2010-01-07 01:02:37