1

在我的 WIN32 对话框中,我画了一个圆圈(位图资源),我想在它附近放置一个图像。我无法强制光标位于圆形图像的顶部:

红色光标被圆形图像遮挡

我将圆圈和光标都绘制为静态窗口:

圆圈:

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);

当光标始终位于底部时,我看不到是什么使圆圈位于顶部(奇怪,它们也在对话框框线下方。

4

2 回答 2

1

您可以手动设置光标:

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;
}

瓦尔特

于 2014-09-11T16:33:25.167 回答
0

我必须执行以下操作:

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

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

于 2014-09-13T13:15:36.483 回答