Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

.ico и .bmp на кнопку CButton не одно и тоже?

95  
  aifl гость11.10.07 08:06
11.10.07 08:06 
Есть две картинки .ico и .bmp Обe по 16х16 пикселей. Если ставлю битмап на CButton то размеры подходят. Если же icon, то он не влезает. Почему так?
#1 
  Chipolino местный житель11.10.07 19:47
NEW 11.10.07 19:47 
в ответ aifl 11.10.07 08:06
а поподробнее ?
#2 
  aifl гость12.10.07 08:00
NEW 12.10.07 08:00 
в ответ Chipolino 11.10.07 19:47
Для теста сделал Dialog-based мфц-проект. В ресурсах импортировал битмап IDB_MYBITMAP (16х16 Pix) и айкон IDI_MYICON (16х16 Pix). Затем создал 2 кнопки CButton, сделал к ним по member-variable m_btnBmp и m_btnIco. В Resource View у одной кнопки properties: Icon = true у другой Bitmap = true. После чего в OninitDialog-е вставил такой код:
HBITMAP h_Bitmap = LoadBitmap( AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_MYBITMAP) );
m_btnBmp.SetBitmap(h_Bitmap);
m_btnIco.SetIcon(AfxGetApp()->LoadIcon(IDI_MYICON));
После чего картинки на кнопках разного размера. Чертовщина какая-то :-)
#3 
Simple Nothing is f*cked12.10.07 09:15
Simple
NEW 12.10.07 09:15 
в ответ aifl 12.10.07 08:00
Мож это?
http://www.codeguru.com/cpp/controls/buttonctrl/article.php/c2057/
В ответ на:
For an icon, this is done with the often overlooked ::LoadImage function. ::LoadImage adds one necessary feature which the standard CWinApp::LoadIcon does not have. When loading the image from a resource, ::LoadImage will resize the icon to any width and height dimensions that you specify. CWinApp::LoadIcon will only load an icon to the sizes specified in the system metrics, which is usually 32x32. NOTE: The "View" and "Super View" icons above come from one 32x32 icon.

#4 
  aifl гость12.10.07 11:01
NEW 12.10.07 11:01 
в ответ Simple 12.10.07 09:15
Да!!! В этом и была проблема!
Вот решение, может кому понадобится:
HANDLE hIcon = ::LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
m_btnIco.SetIcon((HICON) hIcon);
Спасибо!
#5