Спасибо заработало
От: Paul_de_Dupon  
Дата: 15.08.05 20:00
Оценка:
Если интересно ( после того как проблема вроде решена ) WNDPWOC:

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
ASSERT(wnd);
PAINTSTRUCT ps;
HDC hdc;
int x = LOWORD(lParam);
int y = HIWORD(lParam);
switch(uMsg)
{
case WM_CREATE:
break;
case WM_PAINT:
{
hdc = BeginPaint(hwnd, &ps);
ASSERT(hdc);
HDC db_dc = CreateCompatibleDC(hdc);
ASSERT(db_dc);
HBITMAP bmp = CreateCompatibleBitmap(hdc, wnd->w, wnd->h);
ASSERT(bmp);
HBITMAP old = (HBITMAP)SelectObject(db_dc, (HGDIOBJ)bmp);
ASSERT(old != HGDI_ERROR);

wnd->draw(db_dc);

BOOL res = BitBlt(hdc, 0, 0, wnd->w, wnd->h, db_dc, 0, 0, SRCCOPY);
ASSERT(res);

old = (HBITMAP)SelectObject(db_dc, old);
ASSERT(old != HGDI_ERROR);
res = DeleteObject(bmp);
ASSERT(res);
res = DeleteDC(db_dc);
ASSERT(res);
res = EndPaint(hwnd, &ps);
ASSERT(res);
}
break;
//Mouse Event
case WM_LBUTTONDOWN:
HANDLE_MESSAGE(HT_MOUSE_LB_DOWN, (*it)->have_point(x, y), on_lb_down(x, y));
break;
case WM_LBUTTONUP:
HANDLE_MESSAGE(HT_MOUSE_LB_UP, (*it)->have_point(x, y), on_lb_up(x, y));
break;
case WM_RBUTTONDOWN:
HANDLE_MESSAGE(HT_MOUSE_RB_DOWN, (*it)->have_point(x, y), on_rb_down(x, y));
break;
case WM_RBUTTONUP:
HANDLE_MESSAGE(HT_MOUSE_RB_UP, (*it)->have_point(x, y), on_rb_up(x, y));
break;
case WM_MOUSEMOVE:
HANDLE_MESSAGE(HT_MOUSE_MOVE, (*it)->have_point(x, y), on_mouse_move(x, y));
{
Component* cmp_over = wnd->component_from_point(x, y);
if(cmp_over != mouse_over_comp)
{
if(mouse_over_comp && wnd->have_handler(mouse_over_comp, HT_MOUSE_EXIT))
mouse_over_comp->on_mouse_exit(x, y);
mouse_over_comp = cmp_over;
if(mouse_over_comp && wnd->have_handler(mouse_over_comp, HT_MOUSE_ENTER))
mouse_over_comp->on_mouse_enter(x, y);
}
}
break;
//End of Mouse Event
case WM_SIZE:
wnd->synchronize_coords();
break;
//case WM_KEYDOWN:
case WM_MENUCHAR:

//Debug info
#ifdef _DEBUG
{
if(LOWORD(wParam) == 'd')
{
POINT mp;
GetCursorPos(&mp);
ScreenToClient(*wnd, &mp);
Component* c = wnd->component_from_point(mp.x, mp.y);
if(c)
{
Component* p = c->component_from_point(mp.x — c->x(), mp.y — c->y());
if(p)
c = p;
MessageBox(NULL, c->debug_info().c_str(), "Debug Info", MB_OK | MB_ICONINFORMATION);
}
else
{
MessageBox(NULL, wnd->self->debug_info().c_str(), "Debug Info", MB_OK | MB_ICONINFORMATION);
}
}
}
#endif
//End of debug info
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
}
return 0;
}


Спасибо — ключевой момент оказался стиль WS_EX_APPWINDOW, хотя CreateWindowEx(WS_EX_APPWINDOW, ... ,WS_POPUP, ...); ругается GetLastError — Неверный дескриптор окна
Re: сорри не туда запостил
От: Paul_de_Dupon  
Дата: 15.08.05 20:01
Оценка:
сабж.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.