Dans une boîte de dialogue MFC C++ standard, je souhaite créer dynamiquement un contrôle ListBox flottant (ou un autre contrôle standard) dans la boîte de dialogue, en dépassant les limites de la boîte de dialogue. être un enfant simple ou il sera coupé.MFC: fenêtre de la barre d'outils flottante non visible (WS_EX_TOOLWINDOW)
En regardant quelque chose de similaire qui fonctionne, j'ai essayé de l'atteindre mais la fenêtre n'apparaît jamais quand elle est affichée.
Dans mon fichier .H je:
CListBox m_ListBox;
Ensuite, dans ma méthode OnInitDialog (basée sur le poste de Serge):
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;
}
Le problème est la zone de liste est rendue sous d'autres contrôles dans le dialogue. J'ai essayé d'appeler BringWindowToTop mais ça n'aide pas.
De plus, le nouveau contrôle ne peut pas s'étendre au-delà du bord de la boîte de dialogue ... puisqu'il est utilisé de la même manière que la liste déroulante dans une combo-box, ce serait bien.
Je pense que vous devriez mettre le contrôle dans une barre d'outils ou une barre de dialogue et créez-le. Je suis sûr que vous trouverez un exemple sur codeguru.com! – dwo
Ce n'est pas une réponse à votre question, mais vous ne voulez pas convertir le fichier COLOR_WINDOW en HBRUSH dans l'appel de AfxRegisterClass - utilisez plutôt GetSystemColorBrush (COLOR_WINDOW). –