您的位置:首页 > 产品设计 > UI/UE

分析Ezgui之SendMessage实现过程

2010-04-15 15:02 309 查看
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窗口的回调函数,具体实现如下:
//第五行调用一个函数,其功能是返回回调函数指针
/********************************我是开心的分割线************************************
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; //暂没使用
};
//****************************开心的分割线的底部****************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐