비트 맵 이미지로 도구 모음을 만들 때 단추 크기에 문제가 있습니다.
이 이미지 크기는 20/20 픽셀입니다.도구 모음의 단추 크기 - win32 프로그램
나는 도구 모음을 만들고, 20 분의 20 픽셀로 버튼의 크기를 설정,이 코드 :
SendMessage(hToolbar, TB_SETBUTTONSIZE, 0, MAKELPARAM(20, 20));
나는 빨간색과 녹색으로 색 구성표를 설정, 그래서 커서가 버튼 위에있을 때 버튼 프레임이 선명하게 표시됩니다.
는 커서 버튼 위에 서 때 내가 무엇을보고이 :
버튼의 크기를 알 수 있듯이 20 \ 20 픽셀,하지만 26 개 픽셀이 아니다. 왜 그렇게 된거야?
또 하나의 질문은 마우스 커서가 위에있을 때 강조 표시 버튼을 취소 할 수 있으며 대신 커서를 버튼 위로 가져 가면 뜨거운 이미지 목록 (TB_SETHOTIMAGELIST
메시지)을 설정합니다. 단추를 강조 표시하지 않고 뜨거운 이미지가 표시됩니다.
#include <windows.h>
#include <stdlib.h>
#include <CommCtrl.h>
#pragma comment(lib, "comctl32.lib")
#define IDB_PRINT 40000
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE instance;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
instance = hInstance;
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = L"Example";
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
RegisterClassEx(&wcex);
HWND hWnd = CreateWindow(L"Example", L"", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
500, 500, NULL, NULL, hInstance, NULL);
// Initialize common controls.
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
InitCommonControlsEx(&icex);
// create toolbar
HWND hToolbar = CreateWindowExW(WS_EX_TOOLWINDOW | TBSTYLE_EX_HIDECLIPPEDBUTTONS, TOOLBARCLASSNAME, NULL, CCS_NODIVIDER | WS_CHILD | WS_VISIBLE | CCS_ADJUSTABLE | TBSTYLE_ALTDRAG | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS,
0, 0, 0, 0, hWnd, (HMENU)0, instance, NULL);
SendMessage(hToolbar, TB_SETMAXTEXTROWS, 0, 0);
// create image list
HIMAGELIST hImageList = ImageList_Create(20,20, ILC_COLORDDB, 4, 0);
ImageList_Add(hImageList, LoadBitmap(instance, MAKEINTRESOURCEW(IDB_PRINT)), NULL);
// set the image list
SendMessage(hToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hImageList);
SendMessage(hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
// create button
TBBUTTON tbb[1] =
{
{0, 0, TBSTATE_ENABLED, BTNS_AUTOSIZE, {0}, 0, (INT_PTR)L"Print"},
};
// add button to the toolbar
SendMessage(hToolbar, (UINT)TB_ADDBUTTONS, 1, (LPARAM)&tbb);
SendMessage(hToolbar, TB_SETBUTTONSIZE, 0, MAKELPARAM(20, 20));
SendMessage(hToolbar, TB_AUTOSIZE, 0, 0);
// set color scheme to blue
COLORSCHEME cs;
cs.dwSize = sizeof(cs);
cs.clrBtnShadow = RGB(255, 0, 0);
cs.clrBtnHighlight = RGB(0, 255, 0);
SendMessage(hToolbar, TB_SETCOLORSCHEME, 0, (LPARAM)&cs);
// show the toolbar
ShowWindow(hToolbar , SW_SHOW);
// show the main window
ShowWindow(hWnd, nCmdShow);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}