2012-11-27 76 views
1

我有一個名爲「天際線」的窗口,我想要在此窗口中獲得鼠標點擊的座標。我想將它們寫在窗口的標題上,但我不明白如何在釋放鼠標按鈕後更改窗口的名稱。如何在更改後將默認名稱設置爲窗口?

現在我已經做到了這一點:

void mouseOnSkylines(int evt, int x, int y, int flags, void* param) 
{ 
    char sWindowName[100]; 
    HWND hWnd, hPar; 

    switch(evt) 
    { 
    case CV_EVENT_LBUTTONDOWN: 
     hWnd = (HWND)cvGetWindowHandle("Skylines"); 
     hPar = GetParent(hWnd); 

     sprintf(sWindowName, "(%d, %d)", x, y); 
     SetWindowText(hPar, sWindowName); 
     break; 
    case CV_EVENT_LBUTTONUP: 
     hWnd = (HWND)cvGetWindowHandle("Skylines"); 
     hPar = GetParent(hWnd); 

     sprintf(sWindowName, "Skylines"); 
     SetWindowText(hPar, sWindowName); 
    } 
} 

它是如何可以做的更好?

回答

1

在Windows中,您可以設置和重置OpenCV的窗口的標題如下:

#include<afxwin.h> 
void mouse(int _event, int x, int y,int flags, void* param) 
{ 
    static char old_name[256]; 

    if(_event==CV_EVENT_LBUTTONDOWN) 
    { 
     char* old_name_ptr = (char*)param; 
     memcpy(old_name,old_name_ptr,256); 

     char new_name[256]; 
     sprintf(new_name,"%d, %d\0",x,y); 

     HWND hWnd = (HWND)cvGetWindowHandle(old_name); 
     CWnd *wnd = CWnd::FromHandle(hWnd); 
     CWnd *wndP = wnd->GetParent(); 
     wndP->SetWindowText(new_name);  
    } 

    if(_event==CV_EVENT_LBUTTONUP) 
    { 
     char* old_name_ptr = (char*)param; 
     HWND hWnd = (HWND)cvGetWindowHandle(old_name_ptr); 
     CWnd *wnd = CWnd::FromHandle(hWnd); 
     CWnd *wndP = wnd->GetParent(); 
     wndP->SetWindowText(old_name);  
    } 
} 

在主要功能:

IplImage* img = cvLoadImage(path); 

char winTitle[256] = "Skylines"; 

cvNamedWindow(winTitle); 
cvSetMouseCallback(winTitle,mouse,winTitle); 
cvShowImage(winTitle,img); 
cvWaitKey(); 
+0

謝謝你,我已經有這個想法,這似乎是最接近我想要的東西。但我想知道是否有一種方法來獲取當前的窗口名稱或其他東西。 – Val

相關問題