#include
#include //包括minigui常用的宏以及数据类型的定义
#include //包含全局的和通用的接口函数以及某些杂项函数的定义
#include //包含minigui绘图函数的接口定义
#include //包含窗口有关的宏、数据类型、数据接口定义以及函数接口声明
//#include
//包含libminigui中所有内建控件的接口定义
int MiniGUIMain (int argc,
const char* argv[]) //argc:命令行参数个数
{
#ifdef _MGRM_PROCESSES
#endif
}
//窗口过程是一个特定类型的函数,用来接收和处理所有发送到该窗口的消息。
//每个控件类有一个窗口过程,属于同一控件类的所有控件共用同一个窗口过程来处理消息。
static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
//窗口过称函数,参数与MSG结构的前4个域相同
//由minigui调用,是一个回调函数
{
}
以上是完整的helloworld程序,可以直接用。
接下来是对话框,有模态对话框和非模态对话框之分。
模态对话框就是显示之后,用户不能再切换到其他主窗口进行工作的对话框,而只能在关闭之后,才能使用其他的主窗口。MiniGUI 中,使用 DialogBoxIndirectParam 函数建立的对话框就是模态对话框。实际上,该对话框首先根据模板建立对话框,然后禁止其托管主窗口,并在主窗口的 MSG_CREATE 消息中创建控件,之后发送 MSG_INITDIALOG 消息给回调函数,最终建立一个新的消息循环,并进入该消息循环,直到程序调用 EndDialog 函数为止。
非模态对话框在利用对话框模板中的数据建立主窗口之后,会立即返回。使用
CreateMainWindowIndirect
对话框模板
在 MiniGUI
typedef struct
{
} CTRLDATA;
typedef CTRLDATA* PCTRLDATA;
typedef struct
{
} DLGTEMPLATE;
typedef DLGTEMPLATE* PDLGTEMPLATE;
例如:
static CTRLDATA ButtonCtrls[BUTTONNUM];
static DLGTEMPLATE ButtonPanel = {
};
ButtonPanel.controls = ButtonCtrls;
定义完对话框模板数据后,需要定义对话框的回调函数。
对话框操作函数 (不一定仅在对话框中可用)
函数名称
DestroyAllControls
GetDlgCtrlID
GetDlgItem
GetDlgItemInt
SetDlgItemInt
GetDlgItemText
GetDlgItemText2
SetDlgItemText
GetNextDlgGroupItem
GetNextDlgTabItem
SendDlgItemMessage
CheckDlgButton
CheckRadioButton
IsDlgButtonChecked
GetDlgDefPushButton
通用窗口操作函数
函数名称
UpdateWindow
ShowWindow
IsWindowVisible
EnableWindow
IsWindowEnabled
GetClientRect
GetWindowRect
GetWindowBkColor
SetWindowBkColor
GetWindowFont
SetWindowFont
GetWindowCursor
SetWindowCursor
GetWindowStyle
GetWindowExStyle
GetFocusChild
SetFocusChild
GetWindowCallbackProc
SetWindowCallbackProc
GetWindowAdditionalData
SetWindowAdditionalData
GetWindowAdditionalData2
SetWindowAdditionalData2
对话框和控件在内部已使用附加数据二,保留附加数据一给应用程序使用
GetWindowCaption
SetWindowCaption
InvalidateRect
GetUpdateRect
ClientToScreen
ScreenToClient
WindowToScreen
ScreenToWindow
IsMainWindow
IsControl
IsDialog
GetParent
GetMainWindowHandle
GetNextChild
GetNextMainWindow
GetHosting
GetFirstHosted
GetNextHosted
GetActiveWindow
SetActiveWindow
GetCapture
SetCapture
ReleaseCapture
MoveWindow
ScrollWindow
事件钩子
MiniGUI-Threads
typedef int (* MSGHOOK)(void* context, HWND dst_wnd, int msg, WPARAM wparam, LPARAM lparam);
其中,context
注册键盘和鼠标事件的钩子函数:
MSGHOOK GUIAPI RegisterKeyMsgHook (void* context, MSGHOOK hook);
MSGHOOK GUIAPI RegisterMouseMsgHook (void* context, MSGHOOK hook);
调用这两个函数时,只需传入上下文信息以及钩子回调函数的指针即可。成功时会返回先前注册的钩子函数指针。如果想注销先前注册的钩子函数,只需为 hook 参数传入 NULL :RegisterKeyMsgHook (0, old_hook);
窗口重绘
一般来说,在以下情况下,MiniGUI程序的窗口过程会接收到一个MSG_PAINT消息:
1、用户移动窗口或显示窗口时,MiniGUI向先前被隐藏的窗口发送MSG_PAINT消息;
2、程序使用InvalidateRect函数来更新窗口的无效区域,这将产生一个MSG_PAINT消息;
3、程序调用UpdateWindow函数来重绘窗口;
4、覆盖程序窗口的对话框或消息框被消除;
5、下拉或弹出菜单被消除。
基本绘图函数
void GUIAPI SetPixel (HDC hdc, int x, int y, gal_pixel c);
void GUIAPI SetPixelRGB (HDC hdc, int x, int y, int r, int g, int b);
gal_pixel GUIAPI GetPixel (HDC hdc, int x, int y);
void GUIAPI GetPixelRGB (HDC hdc, int x, int y, int* r, int* g, int* b);
gal_pixel GUIAPI RGB2Pixel (HDC hdc, int r, int g, int b);
void GUIAPI LineTo (HDC hdc, int x, int y);
void GUIAPI MoveTo (HDC hdc, int x, int y);
void GUIAPI Circle (HDC hdc, int x, int y, int r);
void GUIAPI Rectangle (HDC hdc, int x0, int y0, int x1, int y1);
菜单
定时器
在 MiniGUI
当创建的定时器到期时,创建定时器时指定的窗口就会收到 MSG_TIMER 消息,并传递到期的定时器标识号。
在不需要定时器时,应用程序可以调用 KillTimer 函数删除定时器。
应用程序还可以调用 ResetTimer 函数重新设定定时器的间隔。
IsTimerInstalled 函数用于检查一个定时器是否被安装到指定的窗口上。
HaveFreeTimer 用于检测系统中是否还有可用的定时器资源。
其他一些说明
1、设备字体
2、文本输出
3、颜色
4、输入框限制
SetWindowCallbackProc(hwndedit,
RestrictedEditBox);