Менеджер диалогов делает многое за вас, поэтому, если у вас нет веских оснований для создания собственного класса окна, вы можете вместо этого создать диалог.
Если вы все еще хотите сделать свой собственный бросок, вам придется перехватить WM_CHAR и искать VK_TAB и VK_SHIFT | VK_TAB . Менеджер диалогов использует в качестве порядка табуляции нечто, называемое z-order (http://msdn.microsoft.com/en-us/library/ms632599%28VS.85%29.aspx#zorder).
FWIW, я бы посоветовал не недооценивать нагрузку, которую вы берете на себя, пытаясь воссоздать существующее средство в Windows, подобное этому. На каждое поведение, о котором вы знаете, обычно есть как минимум столько же, сколько вам нет. Например, как ваше приложение будет работать на устройстве на основе пера? Как насчет расширений доступности? Смогут ли программы чтения с экрана справиться с этим? Все это уже запечено в диспетчере диалогов.
Я не уверен, что следовал ... Я думал
диалоги просто плавающие окна
выше "обычного" (?). Это
Возможно, что приложение использует
просто диалог, а не собственно
CreateWindow ()?
Диалоги могут быть модальными или немодальными дочерними элементами основного окна приложения, но они также могут быть основным окном приложения. Это обычно называется диалоговое приложение .
Если вам нужно диалоговое приложение (то есть приложение с диалоговым окном в качестве основного окна), вы должны сделать что-то вроде этого:
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
{
MSG msg;
HWND hDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
if (hDlg != NULL)
{
ShowWindow(hDlg, SW_SHOWNORMAL);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
Полный пример, вероятно, слишком длинный, чтобы перечислять его здесь, но если вы используете Google для CreateDialog, вы должны найти несколько примеров этого.
... И возможно ли
добавить другие окна внутри диалога?
Даже с пользовательскими процедурами окна?
(Другими словами, в диалогах я не
ограничено только по умолчанию
элементы управления, такие как редактировать и статические?)
Да, вы можете создавать собственные элементы управления в диалоге. В части DIALOG вашего файла .rc вы можете включить что-то вроде:
CONTROL "",IDC_MYCUSTOM,"MyCtrlClassName",WS_TABSTOP,10,20,30,40
Вы также можете создать новый элемент управления и динамически добавить его в диалоговое окно (например, я дам вам Google).
Кроме того, если бы я хотел свернуть свой собственный, как
узнать какой следующий элемент управления?
Я не думаю, что будет
больше вариантов использования, чем базовый рабочий стол
Используйте GetNextDlgTabItem()
, если вы хотите переключаться между элементами управления в диалоговом окне в порядке табуляции: http://msdn.microsoft.com/en-us/library/ms645495%28VS.85%29.aspx
Если вы катаетесь самостоятельно, то вам, вероятно, нужно что-то вроде EnumChildWindows()
: http://msdn.microsoft.com/en-us/library/ms633494%28VS.85%29.aspx
Это также может быть полезно: http://msdn.microsoft.com/en-us/library/bb775501%28VS.85%29.aspx