Пара вопросов новичка...
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:
Помогите плиз, кто знает!!
Если сделать SprWndProc статической (static) то всё проканывает.
2. Оконная процедура в твоем случае и должна быть объявлена как статический метод класса, т.к. в противном случае дополнительно первым параметром ей неявно передается указатель this. Соответственно, в этом случае указатель на твою оконную процедуру имеет тип, отличный от WNDPROC (что и говорит компилятор). В твоем случае указатель имеет тип:
Код:
LRESULT CALLBACK (*pfn)(void *, HWND, UINT, WPARAM, LPARAM);