Re[2]: Не работает регистрация класса окна в своем классе
От: quodum  
Дата: 02.06.09 07:13
Оценка: 1 (1) +1
Здравствуйте, Carc, Вы писали:

C>PS: Зачем wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1) ????


C>Может явно указать системную константу без бубнов со сложением?

C>В hbrBackground должна быть или явно константа из GetSysColor или фактический HBRUSH. Здесь ошибки не может быть?

Всю жизнь так на Win32 делалось.

hbrBackground
Handle to the class background brush. This member can be a handle to the physical brush to be used for painting the background, or it can be a color value. A color value must be one of the following standard system colors (the value 1 must be added to the chosen color).

Не работает регистрация класса окна в своем классе
От: Адепт Беларусь  
Дата: 30.05.09 13:38
Оценка:
Вот такой вот метод класса


ATOM myEditWindow::MyRegisterClass()
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = &myEditWindow::WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hApp;
wcex.hIcon = LoadIcon(hApp, MAKEINTRESOURCE(IDI_MYEDIT));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MYEDIT);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

ATOM A = RegisterClassEx(&wcex);
int i = GetLastError();
return A;

}



после такой инициализации, окно даже не отображаться. последняя ошибка = 2 дословно (не удается найти указанный файл ). выявленно что ошибка именно функции RegisterClassEx что может быть не так?

01.06.09 15:29: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Не работает регистрация класса окна в своем классе
От: meerius Канада  
Дата: 30.05.09 17:52
Оценка:
Здравствуйте, Адепт, Вы писали:


А>после такой инициализации, окно даже не отображаться.


1. hApp — нормальный?
2. Проверти обработчик WM_CREATE
«Мы с тобой в чудеса не верим, Оттого их у нас не бывает…»
Re: Не работает регистрация класса окна в своем классе
От: alexeiz  
Дата: 30.05.09 17:56
Оценка:
Здравствуйте, Адепт, Вы писали:

Попробуй:

А>
А>WNDCLASSEX wcex = {0};
А>



А>после такой инициализации, окно даже не отображаться.


RegisterClass не достаточно. Ты не забыл CreateWindow + ShowWindow?
Re[2]: Не работает регистрация класса окна в своем классе
От: kero Россия  
Дата: 01.06.09 12:43
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>RegisterClass не достаточно. Ты не забыл CreateWindow + ShowWindow?


Именно
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: Не работает регистрация класса окна в своем классе
От: Carc Россия http://www.amlpages.com/home.php
Дата: 01.06.09 13:46
Оценка:
" Адепт " <81767@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3410705@news.rsdn.ru...
> Вот такой вот метод класса
>
>
>
> ATOM myEditWindow::MyRegisterClass()
> {
> WNDCLASSEX wcex;
> 
> wcex.cbSize = sizeof(WNDCLASSEX);
> 
> wcex.style = CS_HREDRAW | CS_VREDRAW;
> wcex.lpfnWndProc = &myEditWindow::WndProc;
> wcex.cbClsExtra = 0;
> wcex.cbWndExtra = 0;
> wcex.hInstance = hApp;
> wcex.hIcon = LoadIcon(hApp, MAKEINTRESOURCE(IDI_MYEDIT));
> wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
> wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
> wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MYEDIT);
> wcex.lpszClassName = szWindowClass;
> wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
> 
> ATOM A = RegisterClassEx(&wcex);
> int i = GetLastError();
> return A;
> 
> }
>

>
>
> после такой инициализации, окно даже не отображаться. последняя ошибка = 2 дословно (не удается найти указанный файл ). выявленно что ошибка именно функции RegisterClassEx что может быть не так?
>
>

1) Что получаем в строке ATOM a=RegisterClassEx? Атом чему равен?
2) Имя класса окна уникальное в szWindowClass?
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
Re: Не работает регистрация класса окна в своем классе
От: Carc Россия http://www.amlpages.com/home.php
Дата: 01.06.09 13:51
Оценка:
PS: Зачем wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1) ????

Может явно указать системную константу без бубнов со сложением?
В hbrBackground должна быть или явно константа из GetSysColor или фактический HBRUSH. Здесь ошибки не может быть?
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
Re: Не работает регистрация класса окна в своем классе
От: pfranz Россия  
Дата: 02.06.09 02:46
Оценка:
Здравствуйте, Адепт, Вы писали:

А>wcex.lpfnWndProc = &myEditWindow::WndProc;


Уверен, что проблема в этой строчке...
Re[3]: Не работает регистрация класса окна в своем классе
От: Carc Россия http://www.amlpages.com/home.php
Дата: 03.06.09 14:42
Оценка:
"quodum" <29617@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3413218@news.rsdn.ru...
> Здравствуйте, Carc, Вы писали:
>
> C>PS: Зачем wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1) ????
>
> C>Может явно указать системную константу без бубнов со сложением?
> C>В hbrBackground должна быть или явно константа из GetSysColor или фактический HBRUSH. Здесь ошибки не может быть?
>
> Всю жизнь так на Win32 делалось.
>
>

> hbrBackground
> Handle to the class background brush. This member can be a handle to the physical brush to be used for painting the background, or it can be a color value. A color value must be one of the following standard system colors (the value 1 must be added to the chosen color).

>
Хм, действительно — а я как-то и не заметил! Был не прав...
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
Re[2]: Не работает регистрация класса окна в своем классе
От: Carc Россия http://www.amlpages.com/home.php
Дата: 03.06.09 14:42
Оценка:
"pfranz" <71176@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3413060@news.rsdn.ru...
> Здравствуйте, Адепт, Вы писали:
>
> А>wcex.lpfnWndProc = &myEditWindow::WndProc;
>
> Уверен, что проблема в этой строчке...
А причем тут myEditWindow::WndProc — хотя бы разок, но она должна бы дернуться с WM_CREATE, а судя по всему этого и вовсе нет. Опять же раз компилятор спокойно пропускает эту строку, значит с конвенциями вызова скорее всего все в порядке.
А что там все-таки со значением ATOM после вызова RegisterClassEx — чего говорит-то хоть, класс регистрируется или нет?
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
Re[3]: Не работает регистрация класса окна в своем классе
От: ole! США http://files.rsdn.org/4543/rsdn.gif
Дата: 04.06.09 23:23
Оценка:
Здравствуйте, Carc, Вы писали:


C>"pfranz" <71176@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3413060@news.rsdn.ru...

>> Здравствуйте, Адепт, Вы писали:
>>
>> А>wcex.lpfnWndProc = &myEditWindow::WndProc;
>>
>> Уверен, что проблема в этой строчке...
C>А причем тут myEditWindow::WndProc — хотя бы разок, но она должна бы дернуться с WM_CREATE, а судя по всему этого и вовсе нет. Опять же раз компилятор спокойно пропускает эту строку, значит с конвенциями вызова скорее всего все в порядке.
C>А что там все-таки со значением ATOM после вызова RegisterClassEx — чего говорит-то хоть, класс регистрируется или нет?

1. проверить, что возвращает RegisterClassEx. если 0, то вызвать GetLastError. если не 0, то класс зарегистрирован.
2. не согласен с "....А причем тут myEditWindow::WndProc — хотя бы разок, но она должна бы дернуться с WM_CREATE...". Как раз таки оконная процедура не будет вызываться до тех пор, пока не будет вызван CreateWindow. Нет смысла вызывать CreateWindow если не сработал RegisterClassEx. Соотвественно, оконная процедура и не будет вызываться, если атом невалидный.
my $.02
Re[4]: Не работает регистрация класса окна в своем классе
От: Carc Россия http://www.amlpages.com/home.php
Дата: 04.06.09 23:50
Оценка:
O>1. проверить, что возвращает RegisterClassEx. если 0, то вызвать GetLastError. если не 0, то класс зарегистрирован.
O>2. не согласен с "....А причем тут myEditWindow::WndProc — хотя бы разок, но она должна бы дернуться с WM_CREATE...". Как раз таки оконная процедура не будет вызываться до тех пор, пока не будет вызван CreateWindow. Нет смысла вызывать CreateWindow если не сработал RegisterClassEx. Соотвественно, оконная процедура и не будет вызываться, если атом невалидный.
Всё это топик-стартеру уже и посоветовали, и про возвращаемые значения RegisterClassEx поспрашивали... Перечитайте ответы из нитки.
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.