鱼C论坛

 找回密码
 立即注册
查看: 1551|回复: 0

[技术交流] 对话框(非模式)调色板⑤

[复制链接]
发表于 2018-8-8 14:59:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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_SELECTED  itemState的标志位,表示选中, 只要把itemState与上ODS_SELECTED 如果等于1 表示选中否则表示没有选中


本章的代码如下:
  1.         case WM_DRAWITEM:
  2.                 if (wParam == IDC_BUTTON1)
  3.                 {
  4.                         FrameRect(((LPDRAWITEMSTRUCT)lParam)->hDC/*获取按钮的dc*/, &((LPDRAWITEMSTRUCT)lParam)->rcItem/*获取按钮矩形*/, (HBRUSH)GetStockObject(BLACK_BRUSH));
  5.                         if (((LPDRAWITEMSTRUCT)lParam)->itemState & ODS_SELECTED/*判断按钮是否被选中*/)
  6.                         {
  7.                                 //当按钮按下时,我们改变按钮的颜色,然后弹出对话框
  8.                                 //Ps:DrawText函数并不会填充整个矩形,而是填充矩形中有输出的地方,所以我们还要用FillRect函数来进行矩形填充
  9.                                 SetBkColor(((LPDRAWITEMSTRUCT)lParam)->hDC, RGB(255, 255, 0));
  10.                                 FillRect(((LPDRAWITEMSTRUCT)lParam)->hDC, &((LPDRAWITEMSTRUCT)lParam)->rcItem, (HBRUSH)GetStockObject(GRAY_BRUSH));
  11.                                 MessageBox(hDlg, TEXT("使用说明"), TEXT("使用说明"), MB_OK | MB_ICONINFORMATION);
  12.                         }
  13.                         else
  14.                         {
  15.                                 SetBkColor(((LPDRAWITEMSTRUCT)lParam)->hDC, RGB(255, 20, 55));
  16.                                 FillRect(((LPDRAWITEMSTRUCT)lParam)->hDC, &((LPDRAWITEMSTRUCT)lParam)->rcItem, (HBRUSH)GetStockObject(GRAY_BRUSH));
  17.                         }
  18.                         DrawText(((LPDRAWITEMSTRUCT)lParam)->hDC, TEXT("About"), lstrlen(TEXT("About")), &((LPDRAWITEMSTRUCT)lParam)->rcItem, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
  19.                 }
  20.                 return TRUE;
复制代码

哈哈,好了这样就完成啦!

传送门:对话框(非模式)调色板④

回复我想知道获取源码哦
游客,如果您要查看本帖隐藏内容请回复

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 21:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表