添加上鼠标事件的监控和像素点的绘制后,就满足了基本的学习条件。
文件:define.h
typedef uint16 z_color; static const int32 MOUSE_LEFT = 0; static const int32 MOUSE_MIDDLE = 1; static const int32 MOUSE_RIGHT = 2; static const int32 MOUSE_DOWN = 3; static const int32 MOUSE_UP = 4;
文件:gui_windows.h
void gui_repaint(void); void gui_setPixel(int x, int y, int r, int g, int b); z_color gui_getPixel(int x, int y);
文件:gui_windows.c
void gui_repaint(void)
{
InvalidateRect(handleMainWindow, NULL, TRUE);
UpdateWindow(handleMainWindow);
}
void gui_setPixel(int x, int y, int r, int g, int b)
{
COLORREF color = RGB(r, g, b);
SetPixel(handleMainWindowDeviceContext, x, y, color);
}
z_color gui_getPixel(int x, int y)
{
return GetPixel(handleMainWindowDeviceContext, x, y);
}
LRESULT CALLBACK gui_mainProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
RECT rect;
switch (message)
{
case WM_PAINT:
handleMainWindowDeviceContext = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
if(mainWindowDisplayFunction)
{
mainWindowDisplayFunction();
}
EndPaint(hwnd, &ps) ;
break;
case WM_MOUSEMOVE:
if(mainWindowMotionFunction)
{
mainWindowMotionFunction(LOWORD(lParam), HIWORD(lParam));
}
break;
case WM_LBUTTONDOWN:
if(mainWindowMouseFunction)
{
mainWindowMouseFunction(MOUSE_LEFT, MOUSE_DOWN, LOWORD(lParam), HIWORD(lParam));
}
break;
case WM_LBUTTONUP:
if(mainWindowMouseFunction)
{
mainWindowMouseFunction(MOUSE_LEFT, MOUSE_UP, LOWORD(lParam), HIWORD(lParam));
}
break;
case WM_RBUTTONDOWN:
if(mainWindowMouseFunction)
{
mainWindowMouseFunction(MOUSE_RIGHT, MOUSE_DOWN, LOWORD(lParam), HIWORD(lParam));
}
break;
case WM_RBUTTONUP:
if(mainWindowMouseFunction)
{
mainWindowMouseFunction(MOUSE_RIGHT, MOUSE_UP, LOWORD(lParam), HIWORD(lParam));
}
break;
case WM_MBUTTONDOWN:
if(mainWindowMouseFunction)
{
mainWindowMouseFunction(MOUSE_MIDDLE, MOUSE_DOWN, LOWORD(lParam), HIWORD(lParam));
}
break;
case WM_MBUTTONUP:
if(mainWindowMouseFunction)
{
mainWindowMouseFunction(MOUSE_MIDDLE, MOUSE_UP, LOWORD(lParam), HIWORD(lParam));
}
break;
case WM_KEYDOWN:
break;
case WM_KEYUP:
break;
case WM_MOUSEWHEEL:
break;
case WM_DESTROY:
PostQuitMessage(0) ;
break;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}