#include <windows.h>
#include "GUI.H"
#include "DIALOG.h"
#include "LISTVIEW.h"
#include "GUI_SIM_Win32.h"
#include "LCD_SIM.H"
#include "gdi.h"
HWND ghWndMain = NULL;
int is_main = 0;
int select_num = 0;
#define ID_BUTTON_0 (GUI_ID_USER + 0x00)
#define ID_LISTVIEW_0 (GUI_ID_USER + 0x01)
#define ID_WINDOW_0 (GUI_ID_USER + 0x02)
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{WINDOW_CreateIndirect, "MainPanel", ID_WINDOW_0, 0, 0, 800, 480, 0, 0x0, 0 },
{BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 40, 420, 60, 15, 0, 0x0, 0 },
{LISTVIEW_CreateIndirect, "Listview", ID_LISTVIEW_0, 0, 50, 400, 300,0, 0x0, 0 },
};
static const char* main_text[][2] = {
{ "1.", "END" },
{ "2.", "SYSTEM BACKUP AND DATA EXPORT" },
{ "3.", "SYSTEM RESTORE AND DATA IMPORT" },
{ "4.", "SYSTEM UPDATE" },
{ "5.", "NVEME DATA UTILITY" },
{ "6.", "FRAM DATA UTILITY" },
{ "7.", "MEMORY FORMAT" },
{ "8.", "FROM DATA UTILITY" },
{ "9.", "BOOT SCREEN" },
{ "10.", "AUTH" }
};
static const char* system_backup_text[][2] = {
{ "1.", "END" },
{ "2.", "BACKUP CNC (*.BAK)" },
{ "3.", "EXPORT CNC PROGRAM (PRG.BIN)" },
{ "4.", "EXPORT PLC LADDER (LADDER.ZIP)" },
};
static const char* system_restore_text[][2] = {
{ "1.", "END" },
{ "2.", "RESTORE CNC (*.BAK)" },
{ "3.", "IMPORT CNC PROGRAM (PRG.BIN)" },
{ "4.", "IMPORT PLC LADDER (LADDER.ZIP)" },
};
static const char * system_update_text[][2] = {
{ "1.", "END" },
};
static const char* nvmem_data_text[][2] = {
{ "1.", "END" },
{ "2.", "BACKUP (CNC -> EXTERNAL MEMORY)" },
{ "3.", "RESTORE (EXTERNAL MEMORY -> CNC)" },
{ "4.", "RESTORE (AUTO BACKUP -> CNC)" },
{ "5.", "FORMAT" },
};
static const char* fram_data_text[][2] = {
{ "1.", "END" },
{ "2.", "BACKUP FRAM (CNC -> EXTERNAL MEMORY)" },
};
static const char* memory_format_text[][2] = {
{ "1.", "END" },
{ "2.", "EXTERNAL MEMORY SD" },
{ "3.", "EXTERNAL MEMORY USB" },
{ "4.", "CNC PROG MEMORY" },
};
static const char* from_data_text[][2] = {
{ "1.", "END" },
{ "2.", "BACKUP INTERNAL MEMORY (CNC -> EXTERNAL MEMORY)" },
};
static const char* boot_screen_text[][2] = {
{ "1.", "END" },
{ "2.", "BOOT SCREEN DISPLAY MODE :" },
{ "3.", "BOOT SCREEN PREVIEW" },
};
static const char* auth_text[][2] = {
{ "1.", "END" },
{ "2.", "PASSWORD :" },
{ "3.", "LOGIN" },
};
static void _select_main (int Sel, WM_HWIN hItem) {
select_num = Sel;
switch (Sel) {
case 0 :
break;
case 1:
for (int i = 0; i < GUI_COUNTOF (system_backup_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, system_backup_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, system_backup_text[i][1]);
}
break;
case 2:
for (int i = 0; i < GUI_COUNTOF (system_restore_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, system_restore_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, system_restore_text[i][1]);
}
break;
case 3:
for (int i = 0; i < GUI_COUNTOF (system_update_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, system_update_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, system_update_text[i][1]);
}
break;
case 4:
for (int i = 0; i < GUI_COUNTOF (nvmem_data_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, nvmem_data_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, nvmem_data_text[i][1]);
}
break;
case 5:
for (int i = 0; i < GUI_COUNTOF (fram_data_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, fram_data_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, fram_data_text[i][1]);
}
break;
case 6:
for (int i = 0; i < GUI_COUNTOF (memory_format_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, memory_format_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, memory_format_text[i][1]);
}
break;
case 7:
for (int i = 0; i < GUI_COUNTOF (from_data_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, from_data_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, from_data_text[i][1]);
}
break;
case 8:
for (int i = 0; i < GUI_COUNTOF (boot_screen_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, boot_screen_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, boot_screen_text[i][1]);
}
break;
case 9:
for (int i = 0; i < GUI_COUNTOF (auth_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, auth_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, auth_text[i][1]);
}
break;
}
}
static void _select_next (int Sel, WM_HWIN hItem) {
if (Sel == 1) {
for (int i = 0; i < GUI_COUNTOF (main_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, main_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, main_text[i][1]);
}
}
else if (Sel == 2) {
switch (select_num) {
}
}
else if (Sel == 3) {
switch (select_num) {
}
}
else if (Sel == 4) {
switch (select_num) {
}
}
else if (Sel == 5) {
switch (select_num) {
}
}
else if (Sel == 6) {
switch (select_num) {
}
}
}
void TestDrawing () {
BeginDraw ();
// 清除为黑色背景,确保可见
ClearCanvas (RGB (0, 0, 0));
// 绘制明显的红色矩形
for (int x = 50; x < 150; x++) {
for (int y = 50; y < 150; y++) {
DrawPixel (x, y, RGB (255, 0, 0));
}
}
// 绘制一些绿色点
for (int i = 0; i < 20; i++) {
DrawPixelWithBrush (200 + i * 5, 100, RGB (0, 255, 0));
}
EndDraw (); // 立即显示
}
static void _cbDialog (WM_MESSAGE* pMsg) {
WM_HWIN hItem;
int NCode = 0;
int Id;
HWND hListview;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG :
BeginDraw ();
hItem = WM_GetDialogItem (pMsg->hWin, ID_LISTVIEW_0);
LISTVIEW_AddColumn (hItem, 20, "1", GUI_TA_LEFT);
LISTVIEW_AddColumn (hItem, 280, "2", GUI_TA_LEFT);
LISTVIEW_SetHeaderHeight (hItem, 0);
LISTVIEW_SetGridVis (hItem, 0);
int FontHeight = GUI_GetFontDistY ();
WIDGET_SetEffect (hItem, &WIDGET_Effect_None);
LISTVIEW_SetRowHeight (hItem, FontHeight + 13);
LISTVIEW_SetFont (hItem, GUI_FONT_16_ASCII);
for (int i = 0; i < GUI_COUNTOF (main_text); i++) {
LISTVIEW_AddRow (hItem, NULL);
LISTVIEW_SetItemText (hItem, 0, i, main_text[i][0]);
LISTVIEW_SetItemText (hItem, 1, i, main_text[i][1]);
}
hItem = WM_GetDialogItem (pMsg->hWin, ID_BUTTON_0);
BUTTON_SetFont (hItem, GUI_FONT_13_ASCII);
BUTTON_SetText (hItem, "[SELECT]");
BUTTON_SetFrameColor (hItem, GUI_WHITE);
BUTTON_SetBkColor (hItem, BUTTON_CI_PRESSED, GUI_WHITE);
BUTTON_SetBkColor (hItem, BUTTON_CI_UNPRESSED,GUI_WHITE);
BUTTON_SetFocusColor (hItem, GUI_WHITE);
hItem = pMsg->hWin;
GUI_SetBkColor (GUI_WHITE);
GUI_Clear ();
const GUI_FONT* pOldFont = GUI_GetFont ();
GUI_SetFont (&GUI_Font32B_ASCII);
GUI_SetColor (GUI_BLACK);
GUI_SetTextMode (GUI_TM_NORMAL);
GUI_DispStringAt ("SYSTEM MAINTAIN MAIN MENU", 0, 0);
GUI_SetFont (pOldFont);
//hItem = WM_GetClientWindow(pMsg->hWin);
//WM_InvalidateWindow (hItem);
EndDraw ();
break;
case WM_PAINT:
BeginDraw ();
EndDraw ();
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId (pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (Id) {
case ID_LISTVIEW_0:
switch (NCode) {
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_SEL_CHANGED:
break;
}
break;
case ID_BUTTON_0:
switch (NCode) {
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
hListview = WM_GetDialogItem (pMsg->hWin, ID_LISTVIEW_0);
int Sel = LISTVIEW_GetSel (hListview);
if (Sel < 0 || Sel > 12) break;
LISTVIEW_DeleteAllRows (hListview);
(is_main == 0) ? _select_main (Sel, hListview) : _select_next (Sel, hListview);
break;
default:
WM_DefaultProc (pMsg);
return;
}
break;
}
break;
default:
WM_DefaultProc (pMsg);
break;
}
}
WM_HWIN CreateFramewin (void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox (_aDialogCreate, GUI_COUNTOF (_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
void MainTask (void) {
BUTTON_SetDefaultSkinClassic ();
WM_SetCreateFlags (WM_CF_MEMDEV);
CreateFramewin ();
while (1) {
GUI_Delay (50);
}
}
DWORD WINAPI MYTASK (LPVOID lpParam) {
MainTask ();
return 0;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
static int counter = 0;
switch (msg) {
case WM_CREATE:
//InitGraphics (hwnd);
SetTimer (hwnd, 1, 10, NULL);
break;
case WM_TIMER:
InvalidateRect (hwnd, NULL, FALSE);
break;
case WM_PAINT:
BeginPaint (hwnd, &ps);
BeginDraw ();
EndDraw ();
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; // 大小改变时重绘
RegisterClassEx (&wc);
HWND hwnd = CreateWindowEx (
0, // 扩展样式
CLASS_NAME, // 类名
L"123", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // x, y 位置
800, 480, // 宽高
NULL, // 父窗口(无)
NULL, // 菜单(无)
hInstance, // 实例句柄
NULL // 额外参数
);
SIM_GUI_Enable ();
GUI_Init ();
InitGraphics(hwnd);
//DrawPixelWithBrush (100,200,RGB(255,0,0));
if (!hwnd) return 0;
ShowWindow (hwnd, nCmdShow);
UpdateWindow (hwnd);
CreateThread (NULL, 0, MYTASK, NULL, 0, NULL);
MSG msg;
while (GetMessage (&msg, NULL, 0, 0)) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return (int)msg.wParam;
}
为什么绘出的图很奇怪