c ++ mfc:通过控制框更新HWND

时间:2014-01-16 16:38:07

标签: c++ mfc sendmessage hwnd

有人可以帮助我如何通过编辑控件或任何其他类型的文本框更新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值 - >在我的程序文本编辑器中输入文本 - >文本转到程序2的文本编辑器。我知道还有其他方法可以做到这一点,但我真的想按照我描述的方式去做。提前致谢。我发现了一个类似的问题,但答案是使用enumwindows,但我不想使用它。

1 个答案:

答案 0 :(得分: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);
        }
    } 
}