2014-01-16 52 views
0

任何人都可以帮助我如何通过编辑控件或任何其他类型的文本框更新HWND值吗?我试过以下C++ mfc:通过控制箱更新HWND

void ChwndtestDlg::OnBnClickedButton1() 
{ 
    TCHAR thebuffer[100]; 
    HWND thetext = (HWND)thebuffer; 
    GetDlgItemText(IDC_EDITWINDOW, thebuffer, 100); 
    ::SendMessage(thetext,WM_SETTEXT,0,(LPARAM)L"hello"); 
} 

但是,这并不行!我对这一切都很陌生,我会很感激任何帮助。请记住,我已经知道enumwindows,并且已经成功地从我的程序中更改了另一个程序中的文本,但是我想实际更新我的编辑控件中的HWND。它应该像这样工作...

方案2的当前HWND = 0x00000: 打开我的程序 - >打开程序#2 - >输入0x00000到我的程序文本框 - >点击我的程序更新按钮hwnd value - >在我的程序中输入文本文本编辑器 - >文本进入程序2的文本编辑器。我知道还有其他方法可以做到这一点,但我真的很想按照我所描述的方式来做。提前致谢。我发现了一个类似的问题,但答案是使用enumwindows,但我不想使用它。

回答

2

您正在输入TCHAR[]本身为HWND。这将永远不会工作。您需要从编辑控件中提取TCHAR[]文本,然后使用_stscanf()或类似的解析函数将该文本值转换为可以被模拟为HWND的整数,然后根据需要将其他文本指定给该HWND

例如:

void ChwndtestDlg::OnBnClickedButton1() 
{ 
    CString sWnd; 
    if (GetDlgItemText(IDC_HWNDEDIT, sWnd) > 0) 
    { 
     HWND hWnd; 
     if (_stscanf((LPTSTR)sWnd, _T("%p"), &hWnd) == 1) 
     { 
      CString sText; 
      GetDlgItemText(IDC_TEXTEDIT, sText); 
      ::SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)(LPTSTR)sText); 
     } 
    } 
} 
+0

唉唉这是太棒了!非常感谢你。 – user3116155