C语言代码:
/****************************************************************************
U32 SendMessage(HWIN hWin,WINMESSAGE pmsg,U32 param1,U32 param2)
function: 向某个窗口发送一个消息,并在目标窗口回调函数执行好后才返回
(注意不要发系统消息给窗口,否则会引起不可知的错误)
Input: hWin 目标窗口句柄
pmsg 消息值
param1,param2 两个自定义参数
return: 不定
example: SendMessage(hWin,WM_LISTBOX_VSCROLL_MOVE,ptr->hlistbox1,0);
******************************************************************************/
U32 SendMessage( HWIN hWin , WINMESSAGE Message , U32 param1 , U32 param2)
{
WINCALLBACK * callback;
if ( ! IsAValidHWIN( hWin) )
return 0;
callback = hh_H2P( hWin) -> lpWinInfo -> lpfnWndProc;
return callfunc_4( hWin , Message , param1 , param2 , callback);
}
U32 callfunc_4( U16 hWin , U16 Message , U32 param1 , U32 param2 , WINCALLBACK wincallback)
{
return ( * wincallback)( hWin , Message , param1 , param2);
}
//SendMessage前四行目的是找到hWin窗口的回调函数,具体实现如下:
//第五行调用一个函数,其功能是返回回调函数指针
/********************************我是开心的分割线************************************
U32 SendMessage(HWIN hWin,WINMESSAGE pmsg,U32 param1,U32 param2)
function: 向某个窗口发送一个消息,并在目标窗口回调函数执行好后才返回
(注意不要发系统消息给窗口,否则会引起不可知的错误)
Input: hWin 目标窗口句柄
pmsg 消息值
param1,param2 两个自定义参数
return: 不定
example: SendMessage(hWin,WM_LISTBOX_VSCROLL_MOVE,ptr->hlistbox1,0);
******************************************************************************/
U32 SendMessage( HWIN hWin , WINMESSAGE Message , U32 param1 , U32 param2)
{
WINCALLBACK * callback;
if ( ! IsAValidHWIN( hWin) )
return 0;
callback = hh_H2P( hWin) -> lpWinInfo -> lpfnWndProc;
return callfunc_4( hWin , Message , param1 , param2 , callback);
}
U32 callfunc_4( U16 hWin , U16 Message , U32 param1 , U32 param2 , WINCALLBACK wincallback)
{
return ( * wincallback)( hWin , Message , param1 , param2);
}
//SendMessage前四行目的是找到hWin窗口的回调函数,具体实现如下:
//第五行调用一个函数,其功能是返回回调函数指针
/********************************我是开心的分割线************************************
typedef U32 WINCALLBACK(HWIN,WINMESSAGE,U32,U32);
PWIN hh_H2P(HWIN hWin)
{
if(hWin>=MaxMumWin)return 0;
return WINARRAY[hWin];
}
PWIN WINARRAY[MAXNUMWIN];
typedef struct tagWIN WIN,*PWIN;
typedef struct tagWINCLASS WINCLASS, *PWINCLASS;
//这个结构是在内部ram中的
struct tagWIN{
RECT rc; //以窗口的绝对坐标定义的rect
HWIN hNextLin; //在z序中下一个窗口的句柄
HWIN hParent,hFirstChild, hNext; //父,第一子,下一个兄弟句柄
HWIN ModelWin;
U32 Status; //窗口状态
PWINCLASS lpWinInfo; //指向WINCLASS结构的远指针
U16 Cursor_type; //光标类型及状态
U32 Cursor_x; //当前窗口的光标坐标
U32 Cursor_y;
void* lpExt;
};
struct tagWINCLASS{
char ActiveKey;
U16 style; //窗口类风格,目前只有WM_ST_CLOSE风格有效
U16 FgColor; //窗口字前景色
U16 BkColor; //窗口字背景色
U16 FillColor; //窗口填充色,注意这也是任何绘图使用的颜色
void* lpUserData; //指向一个用户数据的远指针,用户可以用它来保存任何东东,系统没有使用
WINCALLBACK *lpfnWndProc; //回调函数指针
I32 WinFont; //当前窗口使用的字体
unsigned char *lpWindowText; //若是按钮或带标题栏的窗口,这里的文本将显示在应该出现的地方
unsigned short* lpIcon; //暂没使用
unsigned char* lpMenu; //暂没使用
};
//****************************开心的分割线的底部****************************************/