创建MiniGUI自定义控件
在MiniGUI中,创建MiniGUI自定义控件,是通过替换已有的窗口过程实现的。这种方法是对某个控件类进行子类化,达到创建自定义控件的目的。下面用一个自定义按钮的例子,说明创建过程。这个例子中,用户绘制一个自己定义形状的按钮,而不是普通的3D按钮。
//旧的回调函数句柄
static WNDPROC old_proc;
//创建一个按键
HWND CreateButton(HWND hParentWnd,int id, DWORD dwAddData)
{
HWND btWnd;
DWORD style=0;
//自定义按钮数据结构
BUTTON_DATA* buttondata = (BUTTON_DATA*)dwAddData;
style = WS_CHILD|BS_PUSHBUTTON|BS_MULTLINE;
if(ISBTNVISIBLE(bdata->attr))
style |= WS_VISIBLE;
else
return HWND_INVALID;
btWnd = CreateWindow(CTRL_BUTTON, bdata->str, style, id, bdata->x,
bdata->y, bdata->w, bdata->h, hParentWnd, dwAddData);
//这里重载了按钮的消息处理过程
old_proc= SetWindowCallbackProc(btWnd, MyButtonProc);
UpdateWindow(btWnd, TRUE);
return btWnd;
}
//按钮消息处理函数
static int MyButtonProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
int state, id;
BUTTON_DATA* bdata;
id = GetDlgCtrlID(hWnd);
switch(message)
{
case MSG_PAINT:
//这里使用了新绘制按钮的函数,用户可以绘制自己需要的形状的按钮
//绘制后直接返回,不再调用old_proc绘制按钮
DrawButton(hWnd);
return 0;
break;
}
return (*old_proc)(hWnd,message,wParam,lParam);
}