#include <windows.h>
#include "GUI.H"
#include "GUI_SIM_Win32.h"
#include "LCD_SIM.H"
HWND ghWndMain = NULL;
void MainTask (void) {
GUI_Init ();
GUI_SetBkColor (GUI_BLUE);
GUI_Clear ();
GUI_SetColor (GUI_WHITE);
//GUI_SetFont (&GUI_Font32_ASCII);
GUI_DispStringAt ("Hello, emWin!", 50, 80);
while (1) {
GUI_Delay (200);
}
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (msg) {
case WM_CREATE:
SIM_GUI_Enable ();
SIM_GUI_Init (GetModuleHandle (NULL), hwnd, "", "emWin Simulation");
SIM_GUI_CreateLCDWindow (hwnd, 0, 0, 800, 480, 0);
InvalidateRect (hwnd, NULL, TRUE);
break;
case WM_PAINT:
BeginPaint (hwnd, &ps);
EndPaint (hwnd, &ps);
hdc = BeginPaint (hwnd, &ps);
// 获取客户区大小
GetClientRect (hwnd, &rect);
// 1. 设置背景色为蓝色
HBRUSH hBlueBrush = CreateSolidBrush (RGB (0, 0, 255));
FillRect (hdc, &rect, hBlueBrush);
DeleteObject (hBlueBrush);
HPEN hRedPen = CreatePen (PS_SOLID, 3, RGB (255, 0, 0));
HBRUSH hNullBrush = (HBRUSH)GetStockObject (NULL_BRUSH);
SelectObject (hdc, hRedPen);
SelectObject (hdc, hNullBrush);
Rectangle (hdc, 100, 100, 300, 200);
HPEN hGreenPen = CreatePen (PS_SOLID, 2, RGB (0, 255, 0));
HBRUSH hGreenBrush = CreateSolidBrush (RGB (0, 200, 0));
SelectObject (hdc, hGreenPen);
SelectObject (hdc, hGreenBrush);
Ellipse (hdc, 150, 150, 400, 250);
// 4. 绘制黄色斜线
HPEN hYellowPen = CreatePen (PS_DOT, 1, RGB (255, 255, 0));
SelectObject (hdc, hYellowPen);
MoveToEx (hdc, 0, 0,NULL);
LineTo (hdc, rect.right, rect.bottom);
// 5. 绘制白色文字
SetTextColor (hdc, RGB (255, 255, 255));
SetBkMode (hdc, TRANSPARENT);
HFONT hFont = CreateFont (48, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT ("Arial"));
SelectObject (hdc, hFont);
DrawText (hdc, TEXT ("Hello, GDI!"), -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
DeleteObject (hFont);
DeleteObject (hRedPen);
DeleteObject (hGreenPen);
DeleteObject (hYellowPen);
EndPaint (hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, msg, wParam, lParam);
}
return 0;
}
int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
UNREFERENCED_PARAMETER (hPrevInstance);
UNREFERENCED_PARAMETER (lpCmdLine);
const char CLASS_NAME[] = "MyGDIWindowClass";
WNDCLASSEX wc = { 0 };
wc.cbSize = sizeof (WNDCLASSEX);
wc.lpfnWndProc = WndProc; // 消息处理函数
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
wc.hCursor = LoadCursor (NULL, IDC_ARROW); // 默认箭头光标
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 初始背景(会被 WM_PAINT 覆盖)
wc.style = CS_HREDRAW | CS_VREDRAW; // 大小改变时重绘
if (!RegisterClassEx (&wc)) {
MessageBox (NULL, "1!", "2", MB_ICONERROR);
return -1;
}
// 创建窗口
HWND hwnd = CreateWindowEx (
0, // 扩展样式
CLASS_NAME, // 类名
"CLC", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // x, y 位置
800, 480, // 宽高
NULL, // 父窗口(无)
NULL, // 菜单(无)
hInstance, // 实例句柄
NULL // 额外参数
);
if (!hwnd) {
MessageBox (NULL, "创建窗口失败!", "错误", MB_ICONERROR);
return -1;
}
ShowWindow (hwnd, nCmdShow);
UpdateWindow (hwnd);
MSG msg;
while (GetMessage (&msg, NULL, 0, 0)) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return (int)msg.wParam;
}
显示黑屏