2010-06-10 2 views
1

긴 문자열에 대한 내 툴팁에 ComboBox를 사용하려고합니다. 그러나 도구 설명에서 SetWindowPos를 호출하면 위치가 변경되지 않습니다. TTN_SHOW가 수신 될 때 호출 :SetWindowPos가 툴팁에 영향을주지 않습니다.

::SetWindowPos(textTooltip, NULL, TipRect.left, TipRect.top, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER); 

나는 너비/높이로 일부 값에 SWP_NOSIZE 플래그와 팝을 제거 할 경우, 콤보 상자는이 값으로 크기를 변경하지만 위치는 동일하게 유지됩니다. SetWindowPos는 항상 TRUE를 반환합니다.

 textTooltip = CreateWindowEx(WS_EX_TRANSPARENT, TOOLTIPS_CLASS, NULL, TTS_NOPREFIX, 0, 0, 0, 0, this->GetSafeHwnd(), NULL, NULL, NULL); 
     if(!textTooltip) 
      return; 

     ZeroMemory(&ToolInfo, sizeof(TOOLINFO)); 
     ToolInfo.cbSize = sizeof(TOOLINFO); 
     ToolInfo.uFlags = TTF_TRANSPARENT | TTF_SUBCLASS; 
     ToolInfo.hwnd = this->GetSafeHwnd(); 
     ToolInfo.lpszText = "place holder"; //set in OnSelectChangeOk 
     ToolInfo.uId = 0; 
     ToolInfo.rect = TipRect; //rect is re-set in OnSelectChangeOk 

     ::SendMessage(textTooltip, TTM_ADDTOOL, 0, (LPARAM)&ToolInfo); 

내가 뭔가를 놓치고 있습니까 :

끝은과 같이 초기화한다?

+0

그래, 당신은 반환 값을 확인하고 문제가 있는지 알아 내기 위하여() GetLastError를 호출하는 코드 누락 :에

자세한 내용은 앞, 참조하십시오. –

+0

게시 할 때 오류 검사의 대부분을 제거하여 조금 깔끔하게 만들었습니다. 포스트 SetWindowsPos에 명시된 바와 같이 TRUE를 반환하므로 GetLastError()는 0을 반환합니다. SendMessage를 호출하면 TRUE가 반환됩니다. 감사. – Andrew

답변

1

::SendMessage(hToolWnd, TTM_TRACKPOSITION, 0, MAKELPARAM(x, y));해야하고 ToolInfo.uFlags 회원에 TTF_ABSOLUTE 플래그를 설정하십시오! http://msdn.microsoft.com/en-us/library/bb760422(VS.85).aspx

+0

수동으로 툴팁을 표시하거나 숨길 필요가 없습니까? TTF_ABSOLUTE를 사용하려면 TTF_TRACK도 설정해야합니다. 즉, TTM_TRACKACTIVE 및 TTM_TRACKPOSITION을 사용해야합니다. 이 방법을 고려해 보았습니다. 아마도 WM_MOVE 메시지를 확인한 다음 팁을 표시 할 것이지만, 기대했던 것보다 조금 더 겁니다. 내 구현은 http://blogs.msdn.com/b/oldnewthing/archive/2006/06/26/647365.aspx?PageIndex=2 및 http://msdn.microsoft.com/en-us/에서 시작되었습니다. 라이브러리/bb760252 (VS.85) .aspx # tooltip_sample_inplace – Andrew

+0

ok .. 내 코드는 항상 지정된 위치에서 팝업되어야하는 풍선 도구 팁에 사용되었습니다. 언급 한 기사 에서처럼 TTM_ADJUSTRECT도 보내고 TTN_SHOW 알림을받은 후에 TRUE를 반환합니까? 반환 후 주석은 "기본 위치 지정을 억제합니다"라고 말하면서 아마도 이것을 잊어 버렸을 것입니다. – humbagumba

+0

예, 반환 TRUE는 메시지에 대해 호출되는 표준 루틴을 방지합니다. 지금 약간 다른 경로를 가져 왔고 TrackMouseEvent를 호출하여 ON_WM_MOUSEHOVER 메시지를 가져온 다음 마우스를 올려 놓으면 수동으로 이동하여 툴팁을 표시합니다. 깨끗하지는 않지만 일을하는 것처럼 보입니다. – Andrew

관련 문제