2014-01-16 3 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 값 -> 프로그램 텍스트 편집기에서 텍스트 입력 -> 텍스트는 프로그램 2의 텍스트 편집기로 이동합니다. 이 작업을 수행하는 다른 방법이 있다는 것을 알고 있지만 실제로 설명한대로 수행하고 싶습니다. 미리 감사드립니다. 나는 비슷한 질문을 발견했다.하지만 대답은 enumwindows를 사용하는 것이지만, 나는 그것을 사용하고 싶지 않다.

답변

2

그 자체를 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