MFC怎么在单击按钮时改变一个Icon的显示图像
MFC如何在单击按钮时改变一个Icon的显示图像
我画了两个Icon图像,想在单击一个按钮时将Icon的图像换成另外一个
那个大虾能不能指点指点啊,在线等~~~
------解决方案--------------------
我画了两个Icon图像,想在单击一个按钮时将Icon的图像换成另外一个
那个大虾能不能指点指点啊,在线等~~~
------解决方案--------------------
- C/C++ code
////////////////////////////////////////////////// // Controls.cpp文件 #include <windows.h> #include "resource.h" BOOL __stdcall DlgProc(HWND, UINT, WPARAM, LPARAM); HBITMAP g_hBitmap1; // 第一个图片的句柄 HBITMAP g_hBitmap2; // 第二个图片的句柄 HICON g_hIcon; // 对话框图标句柄 HBRUSH g_hBgBrush; // 背景刷子 int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { // 从资源中加载BMP文件和图标,这些工作也可以在WM_INITDIALOG消息中进行 g_hBitmap1 = ::LoadBitmap(hInstance, (LPCTSTR)IDB_BITMAP1); g_hBitmap2 = ::LoadBitmap(hInstance, (LPCTSTR)IDB_BITMAP2); g_hIcon = ::LoadIcon(hInstance, (LPCTSTR)IDI_MAIN); // 创建背景刷子 g_hBgBrush = ::CreateSolidBrush(RGB(0xa6, 0xca, 0xf0)); int nResult = ::DialogBoxParam( hInstance, // 实例句柄 (LPCTSTR)IDD_MAIN, // 对话框资源ID号 NULL, // 父窗口句柄 DlgProc, // 消息处理函数 NULL); // 对话框初始化的值,在WM_INITDIALOG消息的lParam参数中取出 ::DeleteObject(g_hBgBrush); return 0; } BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: { // 设置标题栏图标 ::SendMessage(hDlg, WM_SETICON, ICON_BIG, (long)g_hIcon); // 初始化显示图片的静态框架 HWND hWndBmp = ::GetDlgItem(hDlg, IDC_BMP); // 设置SS_BITMAP风格 LONG nStyle = ::GetWindowLong(hWndBmp, GWL_STYLE); ::SetWindowLong(hWndBmp, GWL_STYLE, nStyle | SS_BITMAP); // 设置图片 ::SendDlgItemMessage(hDlg, IDC_BMP, STM_SETIMAGE, IMAGE_BITMAP, (long)g_hBitmap1); // 初始化复选框 ::CheckDlgButton(hDlg, IDC_BMP1, BST_CHECKED); } break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: // 向列表框中添加文本 { HWND hWndEdit = ::GetDlgItem(hDlg, IDC_INPUT); // 取得文本框中的文本 char szText[256]; int nLen = ::GetWindowText(hWndEdit, szText, 256); if(nLen > 0) { // 向列表框控件中添加文本 ::SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, NULL, (long)szText); // 清空文本框中的文本 ::SetWindowText(hWndEdit, ""); } } break; case IDCANCEL: // 退出程序 ::EndDialog (hDlg, IDCANCEL); break; case IDC_TOPMOST: // 设置对话框的Z轴位置 { HWND hWndCheck = ::GetDlgItem(hDlg, IDC_TOPMOST); int nRet = ::SendMessage(hWndCheck, BM_GETCHECK, 0, 0); if(nRet == BST_CHECKED) { ::SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW); } else { ::SetWindowPos(hDlg, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW); } } break; case IDC_BMP1: // 更换到第一个图片 { int nRet = ::IsDlgButtonChecked(hDlg, IDC_BMP1); if(nRet == BST_CHECKED) { ::SendDlgItemMessage(hDlg, IDC_BMP, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)g_hBitmap1); } } break; case IDC_BMP2: // 更换到第二个图片 { int nRet = ::IsDlgButtonChecked(hDlg, IDC_BMP2); if(nRet == BST_CHECKED) { ::SendDlgItemMessage(hDlg, IDC_BMP, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)g_hBitmap2); } } break; case IDC_HIDE: // 更换图片的显示状态 { HWND hWndBmp = ::GetDlgItem(hDlg, IDC_BMP); HWND hWndCheck = ::GetDlgItem(hDlg, IDC_HIDE); int nRet = ::SendMessage(hWndCheck, BM_GETCHECK, 0, 0); if(nRet == BST_CHECKED) ::ShowWindow(hWndBmp, SW_HIDE); else ::ShowWindow(hWndBmp, SW_SHOW); } break; } break; case WM_CTLCOLORSTATIC: // 设置静态文本框的背景色 case WM_CTLCOLORDLG: // 设置对话框的背景色 { HDC hdc = (HDC)wParam; // 为静态文本框设置文本背景色 ::SetBkColor(hdc, RGB(0xa6, 0xca, 0xf0)); if((HWND)lParam == ::GetDlgItem(hDlg, IDC_AUTHOR)) { ::SetTextColor(hdc, RGB(0, 0, 0xff)); } return (int)g_hBgBrush; } } return 0; }