Эта страница показывает некоторые инструкции по калибровке для средств управления. Обратите внимание, что размеры даны в обоих DLU (диалоговые единицы) и пиксели, в зависимости от того, помещаете ли Вы управление в диалоговое окно или нет:
http://msdn.microsoft.com/en-us/library/aa511279.aspx#controlsizing
Я думал GetSystemMetrics
API мог бы возвратить стандартный размер для части общего контроля, но я ничего не нашел. Мог бы быть общий контроль определенный API для определения калибровки.
Это было некоторое время, так как я работал над этим, поэтому что я описываю, то, что я сделал, и не обязательно прямой ответ на вопрос.
Я, оказывается, использую битовые массивы 13 x 13, а не 12 x 12. Растровая часть флажка, кажется, передается в 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;
Это, кажется, работает хорошо и на Win2000 и на XP, хотя у меня есть nbo идея, что могла бы сделать Vista.
Это могло бы стоить эксперимента для наблюдения то, что делает игнорирование WM_MEASUREITEM, хотя я обычно обнаруживаю со старым кодом, что у меня обычно было совершенно серьезное основание для того, чтобы сделать что-то, что выглядит избыточным.