2014-09-11 110 views
1

在我的WIN32对话框中,我绘制了一个圆(位图资源),并且我想要位于它附近的图像。 我不能强迫光标在圆上图像的顶部在位图图像顶部绘制图像

Red cursor obscured by circle image

我画两个圈和光标静态窗口:

圈:

HWND hRingImage= CreateStatics(m_hDlg, hInst, SS_BITMAP | WS_BORDER, rc, m_ID, L""); 
HANDLE hRingImage1 = LoadImage(hInst, MAKEINTRESOURCE(IDB_RING50), IMAGE_BITMAP,m_Radius*2, m_Radius*2, LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS); 
SendMessage(hRingImage,STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hRingImage1); 
m_hRingImage = hRingImage; 
if (!Enabled) 
    ShowWindow(hRingImage, SW_HIDE); 

红色光标:

m_hIndicator= CreateStatics(m_hDlg, GetModuleHandle(NULL), SS_ICON , rc, m_ID+10, L""); 
HANDLE hRingImage1 = LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_INDICATOR), IMAGE_CURSOR,8, 8, LR_DEFAULTSIZE|LR_SHARED ); 
SendMessage(m_hIndicator,STM_SETIMAGE, IMAGE_CURSOR, (LPARAM)hRingImage1); 
SetWindowPos(m_hIndicator, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE); 
ShowWindow(m_hIndicator, SW_SHOW); 

我看不到什么使得圆顶最上方,而游标总是在底部(奇怪的是,他们也在对话框框架线。

+0

我不熟悉* win32gui *和* CreateStatics *函数,但据我了解,您为光标创建一个窗口,然后移动此窗口来模拟光标? – 2014-09-11 12:10:56

+0

好的。我希望光标会给我透明度,但它就像一个图像。我应该可能使用GDI +并使用某种转换。 – Shaul 2014-09-11 14:41:19

回答

0

我必须做到以下几点:

ShowWindow(m_hIndicator, SW_HIDE); 
MoveWindow(m_hIndicator, loc.x-3,loc.y-3,8,8, TRUE); 
ShowWindow(m_hIndicator, SW_SHOW); 

“光标” 这实际上只是一个位图位于正确顶部所有其他位图。

1

您可以设置光标manualy:

First load the cursor image-> HCURSOR hCursorRing = LoadCursor(...); 

BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ 
    switch (message){ 
     case WM_CLOSE: 
      DestroyWindow(hDlg); 

      break ; 

     case WM_SETCURSOR: 
      if((HWND)wParam == hRingImage){ 
       SetCursor(hCursorRing); 

       return true; 
      } 

      break ; 

     default: //for messages that we don't deal with 
      return false; 
    } 

    return false; 
} 

瓦尔特

+0

我用了一个不正确的术语'游标'。我需要的是有一个小图像(透明度),以编程方式**在另一个图像上的顶部**(环形)。 – Shaul 2014-09-11 19:27:26

+0

@Shaul小图像将在哪个区域移动? – 2014-09-12 18:24:45