qq1242009750 发表于 2018-8-8 14:59:36

对话框(非模式)调色板⑤

本帖最后由 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]
查看完整版本: 对话框(非模式)调色板⑤