VC中怎么改变Toolbar上的一个Button的图标

例中一个播放器上一个工具栏,那个播放的Button被按下想把它变成暂停的button,怎么只改变那一个button上的图标要纯WINDOWSAPI的,不要MFC的。。。... 例中一个播放器上一个工具栏,那个播放的Button被按下想把它变成暂停的button,怎么只改变那一个button上的图标
要纯WINDOWS API的,不要MFC的。。。
展开
 我来答
Dedicatus545__
2009-06-02 · TA获得超过239个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:165万
展开全部
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;
}
校园古惑仔look
2009-06-02 · TA获得超过200个赞
知道小有建树答主
回答量:118
采纳率:0%
帮助的人:183万
展开全部
你试一下CToolBar::SetButtonInfo这个函数行不行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式