对话框(非模式)调色板⑤
本帖最后由 qq1242009750 于 2018-9-10 20:21 编辑本贴来实现以下功能:
12.自绘制按钮用到了一个WM_DRAWITEM的消息,可以在这个消息里面来绘制按钮
13.按钮按下时,背景变成红色,并弹出模态对话框
PS:这是对话框(非模式)调色板的最后一章帖子了
WM_DRAWITEM:
wParam:标识发送WM_DRAWITEM消息的控件。如果发送消息的控件是菜单,这个参数是零。
lParam:指向DRAWITEMSTRUCT结构体的指针,DRAWITEMSTRUCT结构为需要自绘的控件或者菜单项提供了必要的信息
我们主要用到DRAWITEMSTRUCT结构体的成员有如下几个:
hDC 获取按钮的dc
rcItem 获取按钮矩形
itemState 获取按钮的状态
ODS_SELECTEDitemState的标志位,表示选中, 只要把itemState与上ODS_SELECTED 如果等于1 表示选中否则表示没有选中
本章的代码如下:
case WM_DRAWITEM:
if (wParam == IDC_BUTTON1)
{
FrameRect(((LPDRAWITEMSTRUCT)lParam)->hDC/*获取按钮的dc*/, &((LPDRAWITEMSTRUCT)lParam)->rcItem/*获取按钮矩形*/, (HBRUSH)GetStockObject(BLACK_BRUSH));
if (((LPDRAWITEMSTRUCT)lParam)->itemState & ODS_SELECTED/*判断按钮是否被选中*/)
{
//当按钮按下时,我们改变按钮的颜色,然后弹出对话框
//Ps:DrawText函数并不会填充整个矩形,而是填充矩形中有输出的地方,所以我们还要用FillRect函数来进行矩形填充
SetBkColor(((LPDRAWITEMSTRUCT)lParam)->hDC, RGB(255, 255, 0));
FillRect(((LPDRAWITEMSTRUCT)lParam)->hDC, &((LPDRAWITEMSTRUCT)lParam)->rcItem, (HBRUSH)GetStockObject(GRAY_BRUSH));
MessageBox(hDlg, TEXT("使用说明"), TEXT("使用说明"), MB_OK | MB_ICONINFORMATION);
}
else
{
SetBkColor(((LPDRAWITEMSTRUCT)lParam)->hDC, RGB(255, 20, 55));
FillRect(((LPDRAWITEMSTRUCT)lParam)->hDC, &((LPDRAWITEMSTRUCT)lParam)->rcItem, (HBRUSH)GetStockObject(GRAY_BRUSH));
}
DrawText(((LPDRAWITEMSTRUCT)lParam)->hDC, TEXT("About"), lstrlen(TEXT("About")), &((LPDRAWITEMSTRUCT)lParam)->rcItem, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
}
return TRUE;
哈哈,好了这样就完成啦!
传送门:对话框(非模式)调色板④
回复我想知道获取源码哦
**** Hidden Message *****
页:
[1]