MiniGUI消息大全

1.MSG_DESTROY
调用DestroyMainWindow/DestroyWindow时发送到窗口过程中
例:程序在MSG_DESTROY消息中销毁被托管主窗口的位图、字体等

case MSG_DESTROY:
     DestroyIocn(icon1);
     DestroyIocn(icon2);
     DestroyAllControls(hWnd);
     return 0;

例:被托管主窗口响应MSG_CLOSE消息
case MSG_CLOSE:
     DestroyMainWindow(hWnd);
     MainWindowCleanup(hWnd);
     return 0;

 

2.MSG_CLOSE
点击“X”按钮时向窗口过程发送该消息,程序该在响应该消息时调用DestroyMainWindow销毁主窗口并用PostQuitMessage向队列中投放MSG_QUIT消息


3.MSG_PAINT
窗口进行重绘时该消息被发送到窗口过程
窗口在初始显示时
从隐藏状态变为显示状态
从部分不可见到可见状态
调用InvalidateRect时
窗口过程在收到该消息时应该对窗口进行界面维护

case MSG_PAINT:
     HDC hdc;
     hdc=BeginPaint(hwnd);
     ...
     EndPaint(hwnd,hdc);
     return 0;


程序处理完后要直接返回,不应该再传递给默认窗口过程处理


4.MSG_ERASEBKGND
需要清除窗口背景时发送该消息
InvalidateRect/UpdateWindow并为bErase传递TRUE时
如果在MSG_PAINT消息时重绘所有的窗口客户区应忽略该消息

case MSG_ERASEBKGND:
     return 0;


在窗口背景上填充图片:

case MSG_ERASEBKGND:
    HDC hdc=(HDC)wParam;
    const RECt *clip=(const RECT*)lParam;
    BOOL fGetDC=FALSE;
    RECT rcTemp;
    if(hdc==0)
    {
        hdc=GetClientDC(hwnd);
        fGetDC=TRUE;
    }
    if(clip)
    {
        rcTemp=*clip;
        ScreenToClient(hDlg,&rcTemp.left,&rcTemp.top);
        ScreenToClient(hDlg,&rcTemp.right,&rcTemp.bottom);
        IncludeClipRect(hdc,&rcTemp);
    }
    FillBoxWithBitmap(hdc,0,0,0,0,&bmp_bkgnd);
    if(fGetDC)
    ReleaseDC(hdc);
    return 0;



5.MSG_FONTCHANGED
调用SetWindowFont改变了默认字体后将引发该消息
窗口过程需要处理以便反映出新的字体设置
如编辑框就要处理并重绘自己:

case MSG_FONTCHANGED:
{
    sled=(PSLEDITDATA)GetWindowAdditionalData2(hwnd);
    sled->startpos=0;
    sled->editpos=0;
    edtGetLineInfo(hwnd,sled);
    DestroyCaret(hwnd);
    CreateCaret(hwnd,NULL,1,GetWindowFont(hwnd)->size);
    SetCaretPos(hwnd,sled->leftMargin,sled->topMargin);
    InvalidateRect(hwnd,NULL,TRUE);
    return 0;
}


6.MSG_FONTCHANGING
当调用SetWindowFont改变默认字体时引发该消息
通常窗口过程将此消息传递给默认窗口过程处理
如果窗口不允许用户改变字体可以加以截获该消息将返回非零值
case MSG_FONTCHANGING:
     return -1;


7.MSG_CREATE
窗口成功创建并添加到窗口管理器中时引发该消息


8.MSG_SIZECHANGED
窗口尺寸变化时发生,wParam包含窗口大小,lParam用于保存窗口客户区大小的RECT指针
case MSG_SIZECHANGED:
RECT *rcClient=(RECT*)lParam;
rcClient->right=rcClient->left+_WIDTH;
rcClient->bottom=rcClient->top+_HEIGHT;
return 0;


9.MSG_SIZECHANGING
窗口尺寸发生变化时引发该消息,用于确定窗口大小
wParam包含预期窗口尺寸值,lParam用于保存结果值
case MSG_SIZECHANGING:
 memcpy((PRECT)lParam,(PRECT)wParam,sizeof(RECT));
 return 0;
可以截获该消息使创建的窗口位于指定的位置或具有固定的大小
case MSG_SIZECHANGING:
const RECT *rcExpect=(const RECT*)wParam;
RECT*rcResult=(RECT*)lParam;
rcResult->left=rcExcept->left;
rcResult->top=rcExcept->top;
return 0;


10.MSG_NCCREATE
建立主窗口过程中引发, 此时窗口对象尚未建立,不能使用GetDC等函数
必须在此消息的处理中进行输入法窗口注册
case MSG_NCCREATE:
if(hz_input_init())
SendMessage(HWND_DESKTOP,MSG_IME_REGISTER,(WPARAM)hwnd,0);
else
return -1;
break;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值