网上下的代码, 真没看懂,无奈之举,发帖求问 LRESULT CMyDialogDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加专用代码和/或调用基类
if (message == WM_NCHITTEST)  //这句华什么意思
{
LRESULT lRet = CDialog::WindowProc(message, wParam, lParam); //为什么调用winproc //这一句也是如此??
if(lRet==HTZOOM || lRet == HTMINBUTTON || lRet == HTCLOSE || lRet==HTSYSMENU)
return HTCAPTION;//视为标题栏动作。
else
return lRet;
}
    if(message==0x00AE ||message==0x00AF)
    {
    //    AfxMessageBox(_T("aaaa"));
        return TRUE;
    } return CDialog::WindowProc(message, wParam, lParam);
}//问什么要override这个函数
BOOL CMyDialogDlg::OnNcActivate(BOOL bActive)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
OnNcPaint();
return TRUE; //return CDialog::OnNcActivate(bActive);
}
//这个也是
BOOL CMyDialogDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加专用代码和/或调用基类
//什么意思????
if(wParam == SC_SIZE || wParam == SC_MOVE || wParam == SC_MINIMIZE || wParam == SC_MAXIMIZE || wParam == SC_CLOSE || wParam == SC_RESTORE)
SendMessage(WM_SYSCOMMAND,wParam,lParam); return CDialog::OnCommand(wParam, lParam);
}

解决方案 »

  1.   

    这是自定义消息相应函数,如果消息类型为WM_NCHITTEST,则调用Dialog的消息,如果消息类型为(message==0x00AE ||message==0x00AF)则打印出aaaa.wParam和lParam是消息带的参数。自己可以根据情况看具体的医意义
      

  2.   

    这个..需要去看<WINDOWS编程>.基本上都是普通的消息问题 LRESULT CMyDialogDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // TODO: 在此添加专用代码和/或调用基类
    if (message == WM_NCHITTEST) //如果是鼠标点击非客户区消息
    {
    LRESULT lRet = CDialog::WindowProc(message, wParam, lParam); //为什么调用winproc
    先使用默认处理,完成默认操作,如最大化之类.
    if(lRet==HTZOOM || lRet == HTMINBUTTON || lRet == HTCLOSE || lRet==HTSYSMENU)
    如果是点击最大化,最小化,关闭,系统菜单,将处理结果标记为占击标题栏空白处;否则返回默认操作的处理结果.---有可能有后继函数利用此返回值处理界面问题
    return HTCAPTION;//视为标题栏动作。
    else
    return lRet;
    }
      if(message==0x00AE ||message==0x00AF)
      {
      // AfxMessageBox(_T("aaaa"));
      return TRUE;
      }return CDialog::WindowProc(message, wParam, lParam);
    }//非客户区(标题栏,边框...)激活消息. 处理过程显示:激活时需要重绘非客户区界面--看起来这个是皮肤?
    BOOL CMyDialogDlg::OnNcActivate(BOOL bActive)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    OnNcPaint();
    return TRUE;//return CDialog::OnNcActivate(bActive);
    }
    //这个也是  系统命令处理 WM_COMMAND消息
    BOOL CMyDialogDlg::OnCommand(WPARAM wParam, LPARAM lParam)
    {
    // TODO: 在此添加专用代码和/或调用基类
    //什么意思????
    如果指定的有关客户区变化的消息,那么,非客户区也需要更新.
    if(wParam == SC_SIZE || wParam == SC_MOVE || wParam == SC_MINIMIZE || wParam == SC_MAXIMIZE || wParam == SC_CLOSE || wParam == SC_RESTORE)
    SendMessage(WM_SYSCOMMAND,wParam,lParam);return CDialog::OnCommand(wParam, lParam);
    }
      

  3.   

    WM_NCHITTEST 全称是 Window message non-client area hit test.
    指的是窗体非客户区(即边框)发生点击的时候发生的消息.
      

  4.   

    WindowProc函数,百度一下WM_NCHITTEST消息的含义,这个就是如果是WM_NCHITTEST消息,然后进行编写者想要的响应。
    下面的几个函数override也使类似的原理,无外乎是作者想想实现自定义的功能。
    重写 + 判断条件 + 自定义功能
      

  5.   

    还是去多看看书吧!!这样才能更好理解<WINDOWS编程> VC++ 深入浅出