📄 line.c
字号:
/***************************************************************************** 文件名:line.c* 功能:MiniGUI应用例子。* 创建一个主窗口,并在窗口中间画出随机颜色、随机长度和随机角度* 的50根直线。****************************************************************************/#include <stdio.h>#include <stdlib.h>/* 包含MiniGUI头文件 */#include <minigui/common.h>#include <minigui/minigui.h>#include <minigui/gdi.h>#include <minigui/window.h>#include <minigui/control.h>/* 定义random()函数 */#define random() rand()/* 主窗口起始位置及大小 */#define MWINDOW_LX 5 /* 窗口左边框的x值 */#define MWINDOW_TY 50 /* 窗口上边框的y值 */#define MWINDOW_RX 470 /* 窗口右边框的x值 */#define MWINDOW_BY 400 /* 窗口下边框的y值 *//* 定义窗口宽度、高度的宏 */#define MWINDOW_W (MWINDOW_RX - MWINDOW_LX)#define MWINDOW_H (MWINDOW_BY - MWINDOW_TY)HWND hMainWnd; // 主窗口句柄/***************************************************************************** 名称:WinProc()* 功能:主窗口过程函数。* 处理MSG_PAINT消息,在窗口中间画出随机颜色、随机长度和随机角度* 的50根直线。* 入口参数:hWnd 窗口句柄* message 消息* wParam 消息附加参数1* lParam 消息附加参数2* 出口参数:消息已处理则返回0。****************************************************************************/static int WinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){ HDC hdc; int x0, y0; // 直线第一点坐标变量 int x1, y1; // 直线第二点坐标变量 int no; switch(message) { case MSG_PAINT: hdc = BeginPaint(hWnd); for(no=0; no<50; no++) // 画50条随机直线 { SetPenColor(hdc, SysPixelIndex[random()%16]); // 取得随机颜色 x0 = random()%MWINDOW_W; // 随机取得直线第一点坐标值 y0 = random()%MWINDOW_H; /* 以中心点对称,计算出直线第二点坐标值。 设x0在中点左边,中点值为W/2,则中点到x0的长度Mx = W/2 - x0, 所以x1 = W/2 + Mx = W/2 + W/2 - x0 = W - x0。 若x0在中点右边,也会得到同要的结果(x1=W - x0)。 */ x1 = MWINDOW_W - x0; y1 = MWINDOW_H - y0; MoveTo(hdc, x0, y0); // 移动hdc当前位置到直线第一点处 LineTo(hdc, x1, y1); // 画直线到直线第二点 } EndPaint(hWnd, hdc); break; case MSG_CLOSE: DestroyMainWindow(hWnd); PostQuitMessage(hWnd); break; default: return(DefaultMainWinProc(hWnd, message, wParam, lParam)); } return(0);}/***************************************************************************** 名称:InitMainWindow()* 功能:建立主窗口。* 入口参数:无* 出口参数:建立成功返回1,否则返回0。****************************************************************************/int InitMainWindow(void){ MAINWINCREATE window_info; window_info.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; window_info.dwExStyle = WS_EX_NONE; window_info.spCaption = "GDI Demo"; 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_lightwhite; 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 srand(3721); // 初始化随机总机 InitMainWindow(); ShowWindow(hMainWnd, SW_SHOWNORMAL); while(GetMessage(&Msg, hMainWnd)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } MainWindowThreadCleanup(hMainWnd); return(0);}#ifndef _LITE_VERSION #include <minigui/dti.c>#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -