VC中怎么改变Toolbar上的一个Button的图标
例中一个播放器上一个工具栏,那个播放的Button被按下想把它变成暂停的button,怎么只改变那一个button上的图标要纯WINDOWSAPI的,不要MFC的。。。...
例中一个播放器上一个工具栏,那个播放的Button被按下想把它变成暂停的button,怎么只改变那一个button上的图标
要纯WINDOWS API的,不要MFC的。。。 展开
要纯WINDOWS API的,不要MFC的。。。 展开
2个回答
展开全部
lResult = SendMessage( // returns LRESULT in lResult
(HWND) hWndControl, // handle to destination control
(UINT) TB_CHANGEBITMAP, // message ID
(WPARAM) wParam, // = (WPARAM) (int) idButton
(LPARAM) lParam // = (LPARAM) MAKELPARAM (iBitmap, 0)
);
请参考:
#include <windows.h>
#include <tchar.h>
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")
#define ID_BUTTON0 100
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
static bool change = false;
HIMAGELIST hImgLst;
TBBUTTON tbBtns[] = {
{ 0, ID_BUTTON0 + 0, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
{ 1, ID_BUTTON0 + 1, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
{ 2, ID_BUTTON0 + 2, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 }, };
switch (uMsg) {
case WM_CREATE:
hWnd = CreateWindow(_T("ToolBarWindow32"), NULL, WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT, 0, 0, 0, 0, hWnd, NULL, LPCREATESTRUCT(lParam)->hInstance, NULL);
SendMessage(hWnd, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
SendMessage(hWnd, TB_ADDBUTTONS, 3, (LPARAM)tbBtns);
hImgLst = ImageList_Create(16, 16, ILC_COLORDDB, 4, 4);
ImageList_AddIcon(hImgLst, LoadIcon(NULL, IDI_QUESTION));
ImageList_AddIcon(hImgLst, LoadIcon(NULL, IDI_APPLICATION));
ImageList_AddIcon(hImgLst, LoadIcon(NULL, IDI_ASTERISK));
ImageList_AddIcon(hImgLst, LoadIcon(NULL, IDI_HAND));
SendMessage(hWnd, TB_SETIMAGELIST, 0, (LPARAM)hImgLst);
break;
case WM_COMMAND: if (ID_BUTTON0 == LOWORD(wParam)) SendMessage(GetWindow(hWnd, GW_CHILD), TB_CHANGEBITMAP, ID_BUTTON0, (change = change ? false : true) ? 3 : 0); break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow) {
TCHAR *szClass = _T("Sample");
HWND hWnd;
WNDCLASS wnd = { 0 };
MSG msg;
wnd.lpfnWndProc = WndProc;
wnd.hInstance = hInstance;
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME;
wnd.lpszClassName = szClass;
RegisterClass(&wnd);
if (!(hWnd = CreateWindow(szClass, szClass, WS_OVERLAPPEDWINDOW, 100, 100, 300, 200, NULL, NULL, hInstance, NULL))) return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
(HWND) hWndControl, // handle to destination control
(UINT) TB_CHANGEBITMAP, // message ID
(WPARAM) wParam, // = (WPARAM) (int) idButton
(LPARAM) lParam // = (LPARAM) MAKELPARAM (iBitmap, 0)
);
请参考:
#include <windows.h>
#include <tchar.h>
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")
#define ID_BUTTON0 100
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
static bool change = false;
HIMAGELIST hImgLst;
TBBUTTON tbBtns[] = {
{ 0, ID_BUTTON0 + 0, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
{ 1, ID_BUTTON0 + 1, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
{ 2, ID_BUTTON0 + 2, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 }, };
switch (uMsg) {
case WM_CREATE:
hWnd = CreateWindow(_T("ToolBarWindow32"), NULL, WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT, 0, 0, 0, 0, hWnd, NULL, LPCREATESTRUCT(lParam)->hInstance, NULL);
SendMessage(hWnd, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
SendMessage(hWnd, TB_ADDBUTTONS, 3, (LPARAM)tbBtns);
hImgLst = ImageList_Create(16, 16, ILC_COLORDDB, 4, 4);
ImageList_AddIcon(hImgLst, LoadIcon(NULL, IDI_QUESTION));
ImageList_AddIcon(hImgLst, LoadIcon(NULL, IDI_APPLICATION));
ImageList_AddIcon(hImgLst, LoadIcon(NULL, IDI_ASTERISK));
ImageList_AddIcon(hImgLst, LoadIcon(NULL, IDI_HAND));
SendMessage(hWnd, TB_SETIMAGELIST, 0, (LPARAM)hImgLst);
break;
case WM_COMMAND: if (ID_BUTTON0 == LOWORD(wParam)) SendMessage(GetWindow(hWnd, GW_CHILD), TB_CHANGEBITMAP, ID_BUTTON0, (change = change ? false : true) ? 3 : 0); break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow) {
TCHAR *szClass = _T("Sample");
HWND hWnd;
WNDCLASS wnd = { 0 };
MSG msg;
wnd.lpfnWndProc = WndProc;
wnd.hInstance = hInstance;
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME;
wnd.lpszClassName = szClass;
RegisterClass(&wnd);
if (!(hWnd = CreateWindow(szClass, szClass, WS_OVERLAPPEDWINDOW, 100, 100, 300, 200, NULL, NULL, hInstance, NULL))) return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询