Я создаю диалог, он унаследован от CDialogEx
(имя класса диалога DockColorDlg
), и создаю другой класс (ColorDockable
), который наследуется от класса CDockablePane
. И в моем классе ColorDockable
я создаю экземпляр DockColorDlg
(DockColorDlg m_wndDialog
).
Теперь я звоню из моего Mainfram.cpp и создаю закрепляемое окно, когда я это реализую, оно будет работать, но после нескольких раз или нескольких сборок оно не создаст окно.
if (!m_wndMyDockablePane.Create(_T("Weaves & Color"), this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_MYDOCKABLEPANE, WS_CHILD | WS_VISIBLE | CBRS_TOP))
{
TRACE0("Failed to create dockable pane\n");
return -1; // fail to create
}
m_wndMyDockablePane.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
DockPane(&m_wndMyDockablePane);
//this in my ColorDockable.cpp
int ColorDockable::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
TRACE("ColorDockable::OnCreate called\n");
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndDialog.Create(IDD_DOC_COLOR_DLG, this));
{
TRACE("Failed to create dialog\n");
return 0; // Fail to create
}
bool check = m_wndDialog.ShowWindow(SW_SHOWNORMAL);
m_wndDialog.SetWindowPos(NULL, 0, 0, lpCreateStruct->cx, lpCreateStruct->cy, SWP_NOZORDER | SWP_SHOWWINDOW);
//ShowDockableDialog();
return 0;
}
//but its not created TRACE("Failed to create dialog\n");
Я использую основной мэйнфрейм в качестве обработчика, если главное окно не открывается, перед открытием главного окна оно вызывается. По этой причине это произошло?
Метод CDialog::Create()
создает немодальное диалоговое окно, а это не то, что вам нужно. Вместо этого проверьте классы CPaneDialog и CDialogBar, которые являются классами на основе диалоговых ресурсов и ведут себя как закрепляемая панель и панель инструментов соответственно — последняя также закреплена.
Создайте несколько тестовых проектов, пробуя разные настройки стиля проекта, по крайней мере, вариант «Visual Studio», чтобы проверить их внешний вид и решить, какой из них лучше для вас. Затем вы можете скопировать части кода, созданного мастером, в свой проект ИЛИ, если проект новый, создать его снова с нужными параметрами.
Вы также можете просмотреть пример CTRLBARS MFC.
Можете ли вы немного оживить отладочный код?
GetLastError()
твой друг!