Создания окна посредствами CreateWindow(...)
От: Sergio Tokini  
Дата: 07.12.02 13:00
Оценка:
Люди, помогите мне бестолковому. Я создаю и регестрирую класс окна посредствами RegClassEx(...), затем пишу код типа:
HWND hWnd = CreateWindow(szClass, szTitle, dwflags, CW_USEDEFAULT, CW_USEDEFAULT, 226, 46, 0, 0, hInstance, 0);

Окно не создаётся (hWnd == NULL), если szClass заменяю на что-то вроде "BUTTON" или "STATIC" для эксперимента, то всё нормально. Может я чё делаю не так??? MFC или AWL по некоторым причинам использовать не могу.

Поомоогиитее...
Re: Создания окна посредствами CreateWindow(...)
От: Алекс Россия http://wise-orm.com
Дата: 07.12.02 15:09
Оценка:
Здравствуйте, Sergio Tokini, Вы писали:

хъ

ST>Поомоогиитее...


Приведи код регистрации класса и код оконной процедуры.
Re: Создания окна посредствами CreateWindow(...)
От: Slamin США  
Дата: 07.12.02 15:30
Оценка: 15 (3)
Здравствуйте, Sergio Tokini, Вы писали:

ST>Люди, помогите мне бестолковому. Я создаю и регестрирую класс окна посредствами RegClassEx(...), затем пишу код типа:

ST>HWND hWnd = CreateWindow(szClass, szTitle, dwflags, CW_USEDEFAULT, CW_USEDEFAULT, 226, 46, 0, 0, hInstance, 0);

ST>Окно не создаётся (hWnd == NULL), если szClass заменяю на что-то вроде "BUTTON" или "STATIC" для эксперимента, то всё нормально. Может я чё делаю не так??? MFC или AWL по некоторым причинам использовать не могу.


ST>Поомоогиитее...


1. Если есть возможность использовать пошаговую трассировку, то есть такая полезная переменная в окне Watch — "ERR, hr". Покажет строковую ошибку системы. Если "BUTTON" создается, то скорее всего ошибка в регистрации класса.
2. Если нет возможности трассировать программу, то можно сделать так:
char pBuffer[1024];
::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ::GetLastError(), 0, pBuffer, 1024, NULL);
// pBuffer содержит ту же самую строку с ошибкой
There are 10 types of people in the world, those who don't understand binaries, those who do, and those who understand not only binaries.
Re[2]: Создания окна посредствами CreateWindow(...)
От: Sergio Tokini  
Дата: 07.12.02 23:10
Оценка:
Здравствуйте, Алекс, Вы писали:

А>Здравствуйте, Sergio Tokini, Вы писали:


А>хъ


ST>>Поомоогиитее...


А>Приведи код регистрации класса и код оконной процедуры.


Дык чё ты думаешь, я чтоли его не проводил. Проводил. И в WNDCLASSEX::lpClass или как там он называется указывал то же, что и в CreateWindow т.е. szAppClass, и CreateWindowEx пробовал...
Re[3]: Создания окна посредствами CreateWindow(...)
От: Алекс Россия http://wise-orm.com
Дата: 08.12.02 11:11
Оценка:
Здравствуйте, Sergio Tokini, Вы писали:

[]

Покажи, пожалуйста, каким образом ты регистрируешь класс, а также код оконной процедуры.
Re[2]: Создания окна посредствами CreateWindow(...)
От: Lopcom  
Дата: 08.12.02 20:45
Оценка:
S>1. Если есть возможность использовать пошаговую трассировку, то есть такая полезная переменная в окне Watch — "ERR, hr". Покажет строковую ошибку системы.

— а вот это клёвая фича, спасибо, я не знал.
Re[2]: Создания окна посредствами CreateWindow(...)
От: MaximE Великобритания  
Дата: 08.12.02 21:06
Оценка:
Здравствуйте, Slamin, Вы писали:

S>1. Если есть возможность использовать пошаговую трассировку, то есть такая полезная переменная в окне Watch — "ERR, hr". Покажет строковую ошибку системы. Если "BUTTON" создается, то скорее всего ошибка в регистрации класса.


Не обязательно капителями, можно и пофамильярнее "err, hr"
Re[4]: Создания окна посредствами CreateWindow(...)
От: Sergio Tokini  
Дата: 10.12.02 04:58
Оценка:
Здравствуйте, Алекс, Вы писали:

А>Здравствуйте, Sergio Tokini, Вы писали:


А>[]


А>Покажи, пожалуйста, каким образом ты регистрируешь класс, а также код оконной процедуры.


Что-то вроде:

WNDCLASS wc;
ZeroMemory(&wc, sizeof(wc));

wc.lpszClassName = _T("RegMpqWnd");
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor(0, (LPCTSTR)IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.hInstance = hInst;
ATOM cls = RegisterClass(&wc);

На самом деле у меня много версий этой регистрации, просто это самая короткая, я мне неохота щас много строчить. И ещё у меня появилась идея: я щас сижу под XP и 7-мым VS, XP требует включения ьанифеста для Common-controls, хотя я его и включал, но может включал неправильно? И вообще чё-то я не знаю что мне делать, из примеров весь код работает, а мой почему-то нет
Re[5]: Создания окна посредствами CreateWindow(...)
От: Алекс Россия http://wise-orm.com
Дата: 10.12.02 05:15
Оценка:
Здравствуйте, Sergio Tokini, Вы писали:

[]

Т.е. регистрация проходит нармально? А после создания окна hWnd == 0? Так?
Показывай оконную процедуру.
Re[5]: Создания окна посредствами CreateWindow(...)
От: Sergey Россия  
Дата: 10.12.02 08:52
Оценка:
Здравствуйте, Sergio Tokini, Вы писали:

ST>На самом деле у меня много версий этой регистрации, просто это самая короткая, я мне неохота щас много строчить. И ещё у меня появилась идея: я щас сижу под XP и 7-мым VS, XP требует включения ьанифеста для Common-controls, хотя я его и включал, но может включал неправильно? И вообще чё-то я не знаю что мне делать, из примеров весь код работает, а мой почему-то нет


WM_CREATE сам обрабатываешь? А правильное ли значение возвращаешь?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: Создания окна посредствами CreateWindow(...)
От: Antech  
Дата: 10.12.02 09:36
Оценка:
Здравствуйте, Sergio Tokini, Вы писали:

ST>Окно не создаётся. Поомоогиитее...


Уж простите меня еще раз, Знатоки. Все-таки позволю себе скромное высказывание. Я создаю окно так (правда, это Фортран, сорри, но на Си аналогично):

wc.lpszClassName=LOC(lpszClassName)
wc.lpfnWndProc=wndProc
wc.style=IOR(CS_VREDRAW,CS_HREDRAW)
wc.hInstance=hInst
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION)
wc.hCursor=LoadCursor(NULL,IDC_ARROW)
wc.hbrBackground=hPen
wc.lpszMenuName=0
wc.cbClsExtra=0
wc.cbWndExtra=0
ret=RegisterClass(wc)
hWnd=CreateWindowEx(extStyle,lpszClassName,lpszAppName,&
style,x0,y0,dx,dy,hWndParent,NULL,hInst,NULL)
ret=ShowWindow(hWnd,SW_SHOWNORMAL)

Вроде как до сих пор создавалось и показывалось нормально. Уважаемый Sergio Tokini, если Вас не затруднит, Вы можете повторить этот код, а затем постепенно заменять параметры на свои. Когда перестанет создаваться — значит в этом и дело.

Что касается оконной процедуры, то в простейшем случае нужно в ней иметь хотя бы одну строчку: return DefWindowProc(hWnd,mesg,wParam,lParam);. Это позволит обрабатывать события стандартно, в том числе и WM_CREATE.

Не судите строго, если что не так сказал... Заранее простите.
Re[6]: Создания окна посредствами CreateWindow(...)
От: Sergio Tokini  
Дата: 10.12.02 13:38
Оценка:
Люди, всем огромное спасибо, я наконец-то разобрался со своей оконной процедурой, в которую я по глупости забыл внести обработку WS_CREATE, и забыл вызвать DefWindowProc. теперь всё исправно работает. RSDN — супер.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.