Я создал свой диалог как ресурс, используя редактор ресурсов (редактор диалогов?)
В этом нет ничего особенного, просто две группы, две кнопки, кнопка разделения, две картинки, 3 статических метки, 3поля редактирования, 3 элемента управления вращением, 3 системные ссылки и индикатор выполнения.
Когда я нажимаю Ctrl + T, чтобы проверить диалоговое окно, оно работает нормально, но когда я нажимаю F5 для отладки программы, диалоговое окно никогдапоявляется и программа завершается с кодом -1 (0xffffffff)
Вот код, который я использую для вызова диалогового окна:
#include <Windows.h>
#include "resource.h"
BOOL CALLBACK DlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case (WM_COMMAND):
switch (LOWORD(wParam))
{
default:
break;
}
break;
default:
return FALSE;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINWINDOW), NULL, DlgProc);
int err = GetLastErro(); // This gives 0
return ret; // This gives -1
}
У меня еще ничего нет в DlgProc
пока, потому что я просто хотел, чтобы диалоговое окно отображалось с начала.
Если я установлю точку останова в DlgProc
, то получим следующие сообщения:
48, 85, 297,273, 273, 144, 2 и 130.
Я посмотрел их, и они перевели на:
WM_SETFONT
WM_NOTIFYFORMAT
???
WM_COMMAND
WM_COMMAND
???
WM_DESTROY
WM_NCDESTROY
Кто-нибудь знает, что я делаю неправильно?
Редактировать: :Я нашел решение проблемы!Сначала мы думали, что это поврежденный RC-файл, но я понял, что созданный мной тестовый RC-файл имеет все типы элементов управления, кроме SysLink.Когда я добавил SysLink, произошло то же самое.Я попытался включить ComCtl32.lib в компоновщик, и я также попытался включить заголовок общих элементов управления и вызвать InitCommonControls
, но это ничего не дало.
Я все вернул, как было изначально, и добавил это предварительнодиректива процессора, которая исправила это:
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
Это была проблема.Без этой директивы диалог не будет инициализирован из-за SysLinks!