2008-09-14 9 views
8

내가 (unthemed - 테마 라디오는 완전히 다른 문제이다) 옛날을 그리는거야의 버튼 부분의 크기를 결정하는 방법을 사용하여 라디오 버튼 자신을 DrawFrameControl :윈도우 라디오 버튼

DrawFrameControl(dc, &rectRadio, DFC_BUTTON, isChecked() ? DFCS_BUTTONRADIO | DFCS_CHECKED : DFCS_BUTTONRADIO); 

내가했습니다 RECT에 대해 무엇을 통과해야 하는지를 결정할 확실한 화재 방법을 찾아 낼 수 없었습니다. 저는 12x12 직사각형을 사용하고 있었지만 Windows와 같이 라디오 버튼의 크기를 알려주고 싶습니다.

DrawFrameControl은 내가 전달하는 rect에 맞게 라디오 버튼의 크기를 조정하는 것처럼 보이므로 화면의 다른 (소유자가 아닌) 라디오에서 보이는 "적당한"크기에 가깝도록해야합니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까?

답변

2

내가이 작업을한지 오래되었으므로 내가 한 것은 내가 한 일이며 반드시 질문에 대한 직접적인 대답은 아닙니다.

12 x 12 대신 13 x 13 비트 맵을 사용합니다. 비트 맵 부분은 WM_DRAWITEM에 전달 된 것 같습니다. 그러나, 나는 또한 WM_MEASUREITEM을 설정하고 동일한 값을주었습니다. 그래서 나의 대답은 정확한 철학적 의미에서 "질문을하는"것일 수 있습니다.

 
     case WM_MEASUREITEM: 
      lpmis = (LPMEASUREITEMSTRUCT) lParam; 

      lpmis->itemHeight = 13; 
      lpmis->itemWidth = 13; 

      break; 


     case WM_DRAWITEM: 
      lpdis = (LPDRAWITEMSTRUCT) lParam; 
      hdcMem = CreateCompatibleDC(lpdis->hDC); 



      if (lpdis->itemState & ODS_CHECKED) // if selected 
       { 
       SelectObject(hdcMem, hbmChecked); 
       } 
      else 
       { 
       if (lpdis->itemState & ODS_GRAYED) 
        { 
        SelectObject(hdcMem, hbmDefault); 
        } 
       else 
        { 
        SelectObject(hdcMem, hbmUnChecked); 
        } 
       } 
      StretchBlt(
       lpdis->hDC,   // destination DC 
       lpdis->rcItem.left, // x upper left 
       lpdis->rcItem.top, // y upper left 

       // The next two lines specify the width and 
       // height. 
       lpdis->rcItem.right - lpdis->rcItem.left, 
       lpdis->rcItem.bottom - lpdis->rcItem.top, 
       hdcMem, // source device context 
       0, 0,  // x and y upper left 
       13,  // source bitmap width 
       13,  // source bitmap height 
       SRCCOPY); // raster operation 

      DeleteDC(hdcMem); 
      return TRUE; 

비스타가 할 수있는 일은 nbo 아이디어가 있지만 Win2000과 XP 모두 잘 작동하는 것 같습니다.

WM_MEASUREITEM을 생략 한 것을 보는 것이 가치가 있을지 모르지만, 일반적으로 이전 코드에서는 일반적으로 중복 된 것으로 보이는 것을 수행 할 수있는 완벽한 이유가 있음을 발견했습니다.

4

이 페이지는 컨트롤에 대한 몇 가지 크기 조정 지침을 보여줍니다. 크기는 당신이 대화 여부에 컨트롤을 배치 여부에 따라 두 DLU (대화 단위) 픽셀에 제시되어 있습니다 : http://msdn.microsoft.com/en-us/library/aa511279.aspx#controlsizing

나는 생각에 대한 표준 크기를 반환 할 수있는 GetSystemMetrics API 몇몇은의 일반적인 통제, 그러나 나는 아무것도를 찾아 내지 않았다. 크기 조정을 결정하기위한 공통 제어 API가있을 수 있습니다.