Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Пара вопросов новичка...

7.8K
25 августа 2006 года
littlefrankie
57 / / 23.08.2006
Господа крутые кодеры, помогите кто знает:
1. switch(message){
case WM_CREATE:
//.....
MyClass cc(12, "class 001"); //<-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//.....
break;
//.....

при компиляции несет какую то чушь: initialization is skipped by case label.
В чём тут дело?:confused:


2.

class Spr{
//...
//CALLBACK функция адрес которой пытаюсь присвоить wcex.lpfnWndProc
LRESULT CALLBACK SprWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message)
{
case WM_CREATE:
CreateWindowEx(WS_EX_CLIENTEDGE, "SysListView32", NULL, WS_CHILD | WS_VISIBLE,
0, 0, 0, 0, hWnd, NULL, hInstance, NULL);
//...
break;
case WM_SIZE:
//...
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}


bool SprShowWindow(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;

//здесь присваиваю адрес

wcex.lpfnWndProc = (WNDPROC)this->SprWndProc; //<-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


wcex.cbClsExtra = 0;
wcex.cbWndExtra = DLGWINDOWEXTRA;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = SPR_WNDCLASSNAME;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_APPLICATION);
return RegisterClassEx(&wcex);
}
//...
}


При компиляции:error C2440: 'type cast' : cannot convert from '' to 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)':confused:

Помогите плиз, кто знает!!
7.8K
25 августа 2006 года
littlefrankie
57 / / 23.08.2006
уточнение для 2го вопроса:
Если сделать SprWndProc статической (static) то всё проканывает.
14K
25 августа 2006 года
wrap
35 / / 02.06.2006
1. В данном случае, компилятор предупреждает, что экземпляр класса может быть неинициализирован, но использован в другой ветке оператора switch. Заключи блок в операторные скобки, чтобы ограничить область видимости переменной cc только данной веткой.
2. Оконная процедура в твоем случае и должна быть объявлена как статический метод класса, т.к. в противном случае дополнительно первым параметром ей неявно передается указатель this. Соответственно, в этом случае указатель на твою оконную процедуру имеет тип, отличный от WNDPROC (что и говорит компилятор). В твоем случае указатель имеет тип:
 
Код:
LRESULT CALLBACK (*pfn)(void *, HWND, UINT, WPARAM, LPARAM);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог