none
怎样在一个普通类中修改mfc窗体【主窗体或子窗体】控件的值? RRS feed

  • 问题

  • 怎样在一个普通类中修改mfc窗体【主窗体或子窗体】控件的值?好像有findwindow()..... 或者消息传递

     

    2011年5月16日 3:07

答案

  • 可以获取窗体上的edit控件吗?


    HWND hWnd = ::FindWindow(NULL, _T("XXX"));
     if(hWnd)
     {
      HWND hEdit = ::GetWindow(hWnd, GW_CHILD);
      while(hEdit)
      {
       TCHAR szName[256] = {0};
       ::GetClassName(hEdit, szName, 255);
       if(0 == _tcscmp(szName, _T("Edit")))
       {
        ::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("Hello,World!")));
        break;
       }
       hEdit = ::GetWindow(hEdit, GW_HWNDNEXT);
      }
     }
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月17日 7:50
    版主
  • ::GetClassName(hEdit, szName, 255); if(0 == _tcscmp(szName, _T("Edit"))) { ::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("Hello,World!"))); break; } 这里不是有吗?具体到哪个Edit控件,您可以通过GetDlgCtrlID()得到该CEdit编辑框的ID号来区分各个CEdit控件
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月17日 11:21
    版主

全部回复

  • 跨进程?你需要修改其它进程窗口中什么控件的值呢?FindWindow/FindWindowEx()
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月16日 3:16
    版主
  • 随便什么控件(难道与控件有关吗?),我现在是不知用什么"方式"修改? 我问题里列举了 我并不是想问某个控件的属性或方法不会用.

    比如

    class a{}

    dialog{}

    dialog2{dialog2是由dialog的button事件产生的}

    怎样在 a类里修改dialog 与dialog2控件的值?



    2011年5月16日 4:00
  • 我不是很清楚您说的修改mfc窗体【主窗体或子窗体】控件的值指的是什么?控件上的文本信息?WM_SETTEXT?但并不是所有控件上的文本信息都是利用SendMessage(...,WM_SETTEXT,...);来修改的。

    请您详细描述一下您的需求,谢谢!
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月16日 4:57
    版主
  • edit control

    文本控件

    2011年5月16日 5:41
  • 随便什么控件(难道与控件有关吗?),我现在是不知用什么"方式"修改? 我问题里列举了 我并不是想问某个控件的属性或方法不会用.

    比如

    class a{}

    dialog{}

    dialog2{dialog2是由dialog的button事件产生的}

    怎样在 a类里修改dialog 与dialog2控件的值?




    既然您的dialog2是由dialog的button的BN_CLICKED消息响应中DoModal(),或者Create()/ShowWindow()《前提是您没有指定它的父窗口为其它窗口,即非dialog》出来的。那么您的dialog2就是dialog的子窗口,dialog即为dialog2的父窗口了。这样的话可以在dialog2的函数中利用GetParent()可以得到dailog窗口类的指针。您就可以借助该指针来操作dialog窗口中的控件信息了。比如在dialog2的某一个按钮的BN_CLICKED消息响应函数中设置dialog上的CEdit编辑框控件的文本内容。
    GetParent()->SetDlgItem(IDC_EDIT1, _T("Hello,World"));


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月16日 6:02
    版主
  • edit control

    文本控件


    如果您是跨进程,操作其它进程窗口中的CEdit编辑框控件的话,您可以使用FindWindow得到CEdit编辑框所在的父窗口的HWND窗口句柄,然后利用FindWindowEx找到该编辑框,从而得到该CEdit编辑框的HWND窗口句柄,然后您就可以发送WM_SETTEXT来设置该编辑框的文本内容了。代码类似下面这样
    HWND hWnd = ::FindWindow(NULL, _T("XXX"));
    if(hWnd)
    {
     HWND hEdit = ::FindWindowEx(hWnd, NULL, _T("Edit"), _T(""));
     if(hEdit)
     {
       ::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("Hello,World!"));
     }
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月16日 6:06
    版主
  • error C3861: 'FindWindowEx': identifier not found

     

     

     

    2011年5月16日 6:46
  • 无定义的标示符?您在代码中是什么使用的呢?您当前的工程是什么类型的呢?您是要修改其它进程窗口中的CEdit编辑框的显示文本内容吗?


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月16日 12:39
    版主
  • 嗯,我是wince mfc工程,你看看我上帖列举的实例

    我在dialog与普通类(事例a类)中都不行。

    修改其它进程?
    你看我实例就知道类与dialog结构关系,我要在a类中修改dialog与dialog2中控件的值?
    2011年5月17日 0:58
  • 我在上面不是回复过了吗?

    既然您的dialog2是由dialog的button的BN_CLICKED消息响应中DoModal()显示出来的或者是通过Create()/ShowWindow()来显示《前提是您没有指定它的父窗口为其它窗口,即非dialog类的》出来的。那么您的dialog2就是dialog的子窗口,dialog即为dialog2的父窗口了。这样的话可以在dialog2的函数中利用GetParent()可以得到dailog窗口类的指针。您就可以借助该指针来操作dialog窗口中的控件信息了。比如在dialog2的某一个按钮的BN_CLICKED消息响应函数中设置dialog上的CEdit编辑框控件的文本内容。
    GetParent()->SetDlgItem(IDC_EDIT1, _T("Hello,World"));

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月17日 1:29
    版主
  • 现在是报

    error C3861: 'FindWindowEx': identifier not found 错?

    2011年5月17日 1:37
  • WinCE平台不支持FindWindowEx函数,您可以改用GetWindow()
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月17日 2:35
    版主
  • 可以获取窗体上的edit控件吗?

    2011年5月17日 7:37
  • 可以获取窗体上的edit控件吗?


    HWND hWnd = ::FindWindow(NULL, _T("XXX"));
     if(hWnd)
     {
      HWND hEdit = ::GetWindow(hWnd, GW_CHILD);
      while(hEdit)
      {
       TCHAR szName[256] = {0};
       ::GetClassName(hEdit, szName, 255);
       if(0 == _tcscmp(szName, _T("Edit")))
       {
        ::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("Hello,World!")));
        break;
       }
       hEdit = ::GetWindow(hEdit, GW_HWNDNEXT);
      }
     }
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月17日 7:50
    版主
  • HWND hEdit = ::GetWindow(hWnd, GW_CHILD);
    这句是获取edit控件吗

    如果有多个edit控件?

    我要获取具体的edit控件?

    2011年5月17日 8:22
  • 这个不是的,这个是遍历当前hWnd窗口上的子控件代码的一部分,麻烦您把所有的代码连起来看,具体哪个函数的用法请参考MSDN文档


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月17日 9:08
    版主
  • 你发给我的代码不懂的肯定会在网上查找解释。关键是我要的是获取具体edit控件并为控件赋值。

    你回复我的帖中没有看到获取edit控件的代码


    2011年5月17日 9:33
  • ::GetClassName(hEdit, szName, 255); if(0 == _tcscmp(szName, _T("Edit"))) { ::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("Hello,World!"))); break; } 这里不是有吗?具体到哪个Edit控件,您可以通过GetDlgCtrlID()得到该CEdit编辑框的ID号来区分各个CEdit控件
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月17日 11:21
    版主
  • ::SendMessage(::GetDlgCtrlID(IDC_EDISCAN), WM_SETTEXT, 0, (LPARAM)(_T("Hello,World!")));

    不行;控件id:IDC_EDISCAN

    怎么给cedit赋值?


    2011年5月18日 1:27
  • SendMessage的第一个参数是HWND,还是对照这个代码参考MSDN文档吧。


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月18日 2:21
    版主
  • 完整得msdn有几G,有些资料我怎么到msdn上找不到?

    2011年5月18日 5:32
  • 那您可以使用在线的MSDN文档http://msdn.microsoft.com/zh-cn/


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月18日 6:21
    版主
  • 是在这上面找的,找不到?

    2011年5月19日 3:19
  • 在网页的最上面的搜索栏中输入您要查询的函数名,然后点击搜索,肯定是有的,您不妨耐心多找找~


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月19日 10:54
    版主
  • 你输入的关键字是什么?

    我找过没有/

    2011年5月20日 1:22
  • 您还是好好研究一下在线的MSDN怎么使用吧!http://social.msdn.microsoft.com/Forums/zh-CN/1761/thread/3508efc1-a16c-4902-b360-e486591ca6e5/
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月20日 1:29
    版主
  •  

    潘基文,

    您好!您可以通过http://msdn.microsoft.com/en-us/library在线查msdn问题。

    其中sendmessage的信息请看http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx

     

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年5月25日 6:26
    版主