none
怎么把继承类里重载的消息转发给主窗口? RRS feed

  • 问题

  • 我在一个对话框里放了一个 CStatic,然后把它的 control 变量类型改为我的自定义类 MyStatic,这个类里我重载了 WM_DROPFILES,在 void MyStatic::OnDropFiles(HDROP hDropInfo){} 里加入我的操作后,我发现不知道该如何把这个消息以及参数 hDropInfo 转发给主窗口继续处理,求教各位大大了 ^_^

    void MyStatic::OnDropFiles(HDROP hDropInfo)
    {
      if 文件后缀为 ".doc"
      {
      ....
      }
      else
      将消息转发给主窗口处理 //这该怎么写?
    }

     

    如 GetParent()->SendMessage(WM_DROPFILES, (WPARAM)hDropInfo, 0); 这样传递参数貌似不行

    CMyStatic 中:
    C/C++ code

    void CMyStatic::OnDropFiles(HDROP hDropInfo) { char filePath[MAX_PATH]; UINT count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0); //返回拖拽文件个数 CString strTemp = ""; strTemp.Format(_T("static count = %d"), count); MessageBox(strTemp); if (count) { for(UINT i=0; i<count; i++) { int pathLen = DragQueryFile(hDropInfo, i, filePath, sizeof(filePath)); //返回文件名长度 MessageBox(filePath); } } DragFinish(hDropInfo); //释放系统分配内存 GetParent()->SendMessage(WM_DROPFILES, (WPARAM)hDropInfo, 0); CStatic::OnDropFiles(hDropInfo); }



    CTryDropDlg 中:
    C/C++ code

    void CTrydropDlg::OnDropFiles(HDROP hDropInfo) { char filePath[MAX_PATH]; UINT count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0); //返回拖拽文件个数 CString strTemp = ""; strTemp.Format(_T("dlg count = %d"), count); MessageBox(strTemp); if (count) { for(UINT i=0; i<count; i++) { int pathLen = DragQueryFile(hDropInfo, i, filePath, sizeof(filePath)); //返回文件名长度 MessageBox(filePath); } } DragFinish(hDropInfo); //释放系统分配内存 CDialog::OnDropFiles(hDropInfo); }


    把文件拖到 dlg 非 static 区域,显示 dlg nCount = 1, MessageBox() 正确提示文件路径
    把文件拖到 static ,显示 static nCount = 1, MessageBox() 正确提示文件路径,随后 dlg 接受到 WM_DROPFILES 消息,显示 dlg nCount = -1, 接着无限个 MessageBox() 提示 N 个“烫烫烫烫...”

    2011年4月18日 7:49

答案

  • DragFinish(hDropInfo); //释放系统分配内存

    GetParent()
    ->SendMessage(WM_DROPFILES, (WPARAM)hDropInfo, 0);

    这两句调换位置。
    GetParent()->SendMessage(WM_DROPFILES, (WPARAM)hDropInfo, 0);

    DragFinish(hDropInfo); //释放系统分配内存

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 happyhhb 2011年4月18日 8:22
    2011年4月18日 8:19
    版主

全部回复

  • DragFinish(hDropInfo); //释放系统分配内存

    GetParent()
    ->SendMessage(WM_DROPFILES, (WPARAM)hDropInfo, 0);

    这两句调换位置。
    GetParent()->SendMessage(WM_DROPFILES, (WPARAM)hDropInfo, 0);

    DragFinish(hDropInfo); //释放系统分配内存

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 happyhhb 2011年4月18日 8:22
    2011年4月18日 8:19
    版主
  • 感谢 VisualEleven

    2011年4月18日 8:25