2014-09-11 6 views
1

В диалоговом окне WIN32 я рисую круг (ресурс Bitmap), и я хочу, чтобы изображение находилось рядом с ним. Я не могу заставить курсор быть на верхней окружности изображения:Рисование изображения поверх растрового изображения

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 * функцией, но поскольку я понимаю, что вы создаете окно для курсора, а затем вы перемещаете это окно, чтобы имитировать курсор? –

+0

Ну да. Я надеялся, что курсор даст мне прозрачность, но он действует как изображение. Я должен был использовать GDI + и использовать какое-то преобразование. – Shaul

ответ

0

Я должен был сделать следующее:

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

"Курсор", который на самом деле просто растровый находится правильно на верх всех других растровых изображений.

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

Valter

+0

Я использовал неправильный термин «курсор». Мне нужно иметь небольшое изображение (с прозрачностью), которое программно перемещается ** поверх другого на другое изображение (кольцо). – Shaul

+0

@Shaul В какой области изображение будет двигаться? –

Смежные вопросы