Создаю обычный win32 project. Нужно использовать RegisterClass либо RegisterClassEx. Подскажите как сделать новый класс окна.
Что никто не может мне помочь???
WNDCLASSEX wcex;Какой у тебя компилятор?
// Заполняешь поля класса
// и регистрируешь:
RegisterClassEx(&wcex);
У меня стоит MVS 2005.
Только у меня не дочернее окно, а просто новое окно.Я к тому что WS_CHILD мне нужен)
Так создал класс второго окна:
Ну, так сделай что-то вроде:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_COMMAND: // получили команду от пользователя
switch(wParam) {
case IDM_CREATECHILD: // на создание дочернего окна
// переменная hChildWnd описана глобально, как и hwnd - хендл главного окна приложения
hChildWnd = CreateWindowEx (0, szWindowClass,
"Child Window", // заголовок дочернего окна
WS_CHILD|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_VISIBLE, // его стиль
200, 200, 200, 200, // и размеры
hwnd, NULL, ::GetModuleHandle(NULL),
NULL
);
if(!hChildWnd) MessageBox(0, 0, 0, 0); // сигнализируем об ошибке
else ShowWindow(hChildWnd, SW_SHOWNORMAL);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
Сделал почти как ты описал. Теперь окно About вылезает если вызывать окно
Значит, делай не "почти", а точно так, как я описал. Потому что я не придумывал ничего прямо здесь, а проверил, и скопировал кусок из отработавшего проекта. Никакое окно "About" не выскакивает, когда не положено...
Переделал работает. Не получается точно также...
case IDM_CREATECHILD: // на создание дочернего окна
// переменная hChildWnd описана глобально, как и hwnd - хендл главного окна приложения
hChildWnd = CreateWindowEx (0, szWindowClass,
"Child Window", // заголовок дочернего окна
WS_CHILD|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_VISIBLE, // его стиль
200, 200, 200, 200, // и размеры
hwnd, NULL, ::GetModuleHandle(NULL),
NULL
);
Я изначально тестировал на Code::Blocks, но для Студии надо сделать следующее (пишу по памяти, Студию запустить сейчас не могу, я не под Windows):
1. Добавить
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szChildTitle[MAX_LOADSTRING]; // Вот эту строку - здесь будет храниться заголовок дочерней формы
// Initialize global strings(естественно, в resource.h надо добавить константу IDS_CHILD_TITLE, а в сам файл ресурсов .RC - добавить к уже существующему STRINGTABLE саму строку:
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDS_CHILD_TITLE, szChildTitle, MAX_LOADSTRING); // <--- Чтение из ресурсов
IDS_APP_TITLE "app"
IDS_CHILD_TITLE "Child Window"
wc.lpszClassName = szWindowClass;
Да про break ты прав, я поспешил. С заголовкам так и не получилось ничего сделать.
Мне вот интересено как сделать оконную процедуру для дочернего окна, типа LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) у главного окна.
Не знаю, что там у тебя не получилось, вот работающий проект (правда, собирался на VC++ 2008):
just.rar ( 16.57 килобайт )
Кол-во скачиваний: 428
Правда его еще надо "допиливать", при создании и перемещении нескольких дочерних окон проявляются артефакты. Но это уже попробуй сделать сам...
Volvo, спасибо огромное!!! Я начал потихоньку понимать что к чему