004
31.07.2007, 11:05 Uhr
~Stefan667
Gast
|
Hallo, danke für eure Antworten, ich habs hinbekommen. Funktioniert nicht soooo gut, denn wenn man die Maus zu schnell bewegt bleibt das Fenster stehen. Man müsste also noch ClipCursor() einbauen, so das die Maus im bewegenden Fenster bleibt, aber für mein Zwecke reicht das erstmal aus. Wenns jemanden interessiert:
C++: |
BOOL CDescriptionWindow::PreTranslateMessage(MSG* pMsg) { //The code starts here static bool mouse_down = false; static CRect MainRect; CRect rect; static HCURSOR cursor; // use this if you want the // “dragging” cursor different from the normal one static CPoint point; switch(pMsg->message) { case WM_LBUTTONDOWN: //save current dialog’s rectangle GetWindowRect(&MainRect); //save current cursor coordinate point = pMsg->pt; ScreenToClient(&point); //change the sign mouse_down = true; break; case WM_LBUTTONUP: //stop the sign mouse_down = false; //gimme a standard cursor now!! cursor = ::AfxGetApp()->LoadStandardCursor(IDC_ARROW); if( m_pHandleToRelatedTextWindow != NULL ) { GetWindowRect( &rect ); m_pHandleToRelatedTextWindow->MoveWindow( rect.left+10, rect.top+10, 280, 150);
if( m_strMarkerNumber!=_T("") && m_strRelatedFile!=_T("")) { CString strXPos =_T(""); CString strYPos =_T("");
strXPos.Format(_T("%d"), rect.left); strYPos.Format(_T("%d"), rect.top); WritePrivateProfileString(_T("Marker")+m_strMarkerNumber, _T("xPos"),strXPos,m_strRelatedFile); WritePrivateProfileString(_T("Marker")+m_strMarkerNumber, _T("yPos"),strYPos,m_strRelatedFile); } } break; case WM_MOUSEMOVE : cursor = ::AfxGetApp()->LoadStandardCursor(IDC_ARROW); if(mouse_down) { //finally, move the window MoveWindow( pMsg->pt.x - point.x, //count the relative position pMsg->pt.y - point.y, MainRect.Width(), //if the width doesn’t change MainRect.Height(), //if the height doesn’t change TRUE); } } SetCursor(cursor);
return CDialog::PreTranslateMessage(pMsg); }
|
|