📄 desktop.c
字号:
/***************************************************************************** 文件名:desktop.c* 功能:MiniGUI应用例子。* 创建一个无边框和标题的桌面窗口,然后在桌面上显示6个图标按钮,* 使用按键进行选择操作。****************************************************************************//* 包含MiniGUI的配置头文件(编译配置选项) */#include "MiniGUI_config.h"/* 包含MiniGUI头文件 */#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "control.h"/* 主窗口起始位置及大小 */#define MWINDOW_LX 0 /* 窗口左边框的x值 */#define MWINDOW_TY 0 /* 窗口上边框的y值 */#define MWINDOW_RX 239 /* 窗口右边框的x值 */#define MWINDOW_BY 319 /* 窗口下边框的y值 *//* 包含各图片资源文件 */extern const unsigned int start_no;extern const unsigned char start_data[];extern const unsigned int top_no;extern const unsigned char top_data[];extern const unsigned int sz_no01;extern const unsigned char no01_data[];extern const unsigned int sz_no02;extern const unsigned char no02_data[];extern const unsigned int sz_no03;extern const unsigned char no03_data[];extern const unsigned int sz_no04;extern const unsigned char no04_data[];extern const unsigned int sz_no05;extern const unsigned char no05_data[];/*#include "no01.c"#include "no02.c"#include "no03.c"#include "no04.c"#include "no05.c"#include "top.c"#include "start.c"*/HWND hMainWnd; // 主窗口句柄const char* menu_hz[] = { "信息", "服务", "设置", "其它", "导航", }; /***************************************************************************** 名称:WinProc()* 功能:主窗口过程函数。* 处理MSG_PAINT消息,在窗口中显示6个图标。* 处理MSG_CHAR消息,进行图标菜单选择操作。* 入口参数:hWnd 窗口句柄* message 消息* wParam 消息附加参数1(对于不同的消息,有不同的用途)* lParam 消息附加参数2(对于不同的消息,有不同的用途)* 出口参数:消息已处理则返回0。****************************************************************************/static int WinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){ static BITMAP s_startbmp, s_topbmp; static BITMAP s_bmp[6]; static PLOGFONT s_font, s_font1; static int s_sel = 0; static int s_selbak = 0; int i; HDC hdc; // 定义一个图形设备上下文对象,输出字符时需要。 switch(message) { case MSG_CREATE: // 装载图片资源 LoadBitmapFromMem(HDC_SCREEN, &s_startbmp, start_data, start_no, "bmp"); LoadBitmapFromMem(HDC_SCREEN, &s_topbmp, top_data, top_no, "bmp"); LoadBitmapFromMem(HDC_SCREEN, &s_bmp[0], no01_data, sz_no01, "bmp"); LoadBitmapFromMem(HDC_SCREEN, &s_bmp[1], no02_data, sz_no02, "bmp"); LoadBitmapFromMem(HDC_SCREEN, &s_bmp[2], no03_data, sz_no03, "bmp"); LoadBitmapFromMem(HDC_SCREEN, &s_bmp[3], no04_data, sz_no04, "bmp"); LoadBitmapFromMem(HDC_SCREEN, &s_bmp[4], no05_data, sz_no05, "bmp"); // 建立逻辑字体 s_font = CreateLogFont( NULL, "song", "GB2312", FONT_WEIGHT_BOLD, FONT_SLANT_ITALIC, FONT_SETWIDTH_NORMAL, FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE, 16, 0); s_font1 = CreateLogFont( NULL, "song", "GB2312", FONT_WEIGHT_BOLD, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL, FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE, 16, 0); break; case MSG_PAINT: hdc = BeginPaint(hWnd); // 获得设备hdc // 显示各图标 FillBoxWithBitmap(hdc, 0, 0, 240, 24, &s_topbmp); for(i=0; i<3; i++) { FillBoxWithBitmap(hdc, 10, i*80+30, 48,48, &s_bmp[i]); SelectFont(hdc, s_font1); TextOut(hdc, 18, i*80+82, menu_hz[i]); } for(i=0; i<2; i++) { FillBoxWithBitmap(hdc, 80, i*80+30, 48,48, &s_bmp[i+3]); SelectFont(hdc, s_font1); TextOut(hdc, 88, i*80+82, menu_hz[i+3]); } // 显示窗口"确定""取消"菜单 FillBoxWithBitmap(hdc, 0, 283, 240, 37, &s_startbmp); SetBkMode(hdc, BM_TRANSPARENT); SetTextColor(hdc, COLOR_lightwhite); SelectFont(hdc, s_font); TextOut(hdc, 15, 295, "确定"); TextOut(hdc, 190, 295, "取消"); // 设置选中的菜单项(选择边框) SetPenColor(hdc, COLOR_black); if(s_sel<3) { Rectangle(hdc, 8,s_sel*80+28, 60,s_sel*80+80); } else { Rectangle(hdc, 78,(s_sel-3)*80+28, 130,(s_sel-3)*80+80); } SelectFont(hdc, s_font1); TextOut(hdc, 40, 4, menu_hz[s_sel]); EndPaint(hWnd, hdc); // 释放设备hdc break; case MSG_CHAR: i = 0; // 使用i作为更新显示标志 switch(wParam) { case '1': // 左移 if(s_sel>2) { s_selbak = s_sel; s_sel = s_sel-3; i = 1; } break; case '2': // 下移 if(s_sel<4) { s_selbak = s_sel; s_sel++; i = 1; } else { s_selbak = 0; s_sel = 4; } break; case '3': // 右移 if(s_sel<3) { s_selbak = s_sel; s_sel += 3; if(s_sel>4) s_sel = 4; i = 1; } break; case '6': // 上移 if(s_sel<=0) { s_selbak = 4; s_sel = 0; } else { s_selbak = s_sel; s_sel--; i = 1; } break; case '8': // 确定选择,执行相应的功能 MessageBox(hMainWnd, "功能正在建设...", "提示", MB_OK); break; default: break; } if(i==1) { hdc = BeginPaint(hWnd); // 获得设备hdc // 清除旧的选择项(选择边框) SetPenColor(hdc, COLOR_lightgray); if(s_selbak<3) { Rectangle(hdc, 8,s_selbak*80+28, 60,s_selbak*80+80); } else { Rectangle(hdc, 78,(s_selbak-3)*80+28, 130,(s_selbak-3)*80+80); } // 设置新的选择项(选择边框) SetPenColor(hdc, COLOR_black); if(s_sel<3) { Rectangle(hdc, 8,s_sel*80+28, 60,s_sel*80+80); } else { Rectangle(hdc, 78,(s_sel-3)*80+28, 130,(s_sel-3)*80+80); } // 重新显示“确认”“取消”菜单 FillBoxWithBitmap(hdc, 0, 283, 240, 37, &s_startbmp); SetBkMode(hdc, BM_TRANSPARENT); SetTextColor(hdc, COLOR_lightwhite); SelectFont(hdc, s_font); TextOut(hdc, 15, 295, "确定"); TextOut(hdc, 190, 295, "取消"); // 重新显示"TOP"菜单 FillBoxWithBitmap(hdc, 0, 0, 240, 24, &s_topbmp); SetBkMode(hdc, BM_TRANSPARENT); SetTextColor(hdc, COLOR_lightwhite); SelectFont(hdc, s_font1); TextOut(hdc, 40, 4, menu_hz[s_sel]); EndPaint(hWnd, hdc); // 释放设备hdc } break; case MSG_CLOSE: UnloadBitmap(&s_startbmp); for(i=0; i<5; i++) UnloadBitmap(&s_bmp[i]); DestroyLogFont(s_font); DestroyLogFont(s_font1); DestroyMainWindow(hWnd); // 销毁主窗口 PostQuitMessage(hWnd); // 发送MSG_QUIT消息,通知"消息循环"结束 break; default: return(DefaultMainWinProc(hWnd, message, wParam, lParam)); } return(0);}/***************************************************************************** 名称:InitMainWindow()* 功能:建立主窗口。* 入口参数:无* 出口参数:建立成功返回1,否则返回0。****************************************************************************/int InitMainWindow(void){ MAINWINCREATE window_info; window_info.dwStyle = WS_VISIBLE; window_info.dwExStyle = WS_EX_NONE; window_info.spCaption = ""; window_info.hMenu = 0; window_info.hCursor = GetSystemCursor(0); window_info.hIcon = 0; window_info.MainWindowProc = WinProc; window_info.lx = MWINDOW_LX; window_info.ty = MWINDOW_TY; window_info.rx = MWINDOW_RX; window_info.by = MWINDOW_BY; window_info.iBkColor = COLOR_lightgray; window_info.dwAddData = 0; window_info.hHosting = HWND_DESKTOP; hMainWnd = CreateMainWindow(&window_info); if(hMainWnd == HWND_INVALID) return(0); else return(1);}/***************************************************************************** 名称:MiniGUIMain()* 功能:MiniGUI程序入口点。* 入口参数:argc 参数个数* argv 参数字符串指针* 出口参数:返回0。****************************************************************************/int MiniGUIMain(int argc, const char *argv[]){ MSG Msg;#ifdef _LITE_VERSION SetDesktopRect(0,0, 800,600);#endif InitMainWindow(); // 建立主窗口 ShowWindow(hMainWnd, SW_SHOWNORMAL); // 显示主窗口 /* 消息循环 */ while(GetMessage(&Msg, hMainWnd)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } MainWindowThreadCleanup(hMainWnd); return(0);}/* 定义桌面接口函数 */#ifndef _LITE_VERSION #include "dti.c"#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -