鱼C论坛

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

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

[复制链接]
发表于 2018-7-29 14:30:20 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 qq1242009750 于 2018-9-10 20:23 编辑

本贴来实现以下功能:
9.每当我们有色号发生改变都要改变我们右边色板的颜色
10.因为右边的色板是用ListBox做的,所以要改变ListBox的背景色
11.改变LisBox的背景色可以用WM_CTLCOLORLISTBOX消息来改变,此消息要返回一个画刷句柄,此句柄就是ListBox背景色的句柄


其实这三个功能实现起来很简单,在要在对话框处理函数里加一个WM_CTLCOLORLISTBOX消息就可以了。
每当我们改变了滚动条后,都会把ListBox重绘一次,重绘时会经过WM_CTLCOLORLISTBOX消息,我们只要在WM_CTLCOLORLISTBOX消息里创建一个三原色结合的画刷就好了,并在每一次出发滚动条消息时,删除即可.


下面将放出代码,只要和前面的代码对比一下就知道增加了什么功能了


  1. INT_PTR _stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3.         BOOL Ret = FALSE;
  4.         int i = 0;
  5.         SCROLLINFO si;
  6.         si.cbSize = sizeof(SCROLLINFO);
  7.         static HBRUSH HVScrollBrush, ListBoxBrush;

  8.         switch (message)
  9.         {
  10.         case WM_INITDIALOG:
  11.                 si.fMask = SIF_POS | SIF_RANGE;                //设置标志位
  12.                 si.nMin = 0;
  13.                 si.nMax = 255;                //设置滚动条的范围 0 - 255
  14.                 si.nPos = 0;
  15.                 for (i = IDC_SCROLLBAR4; i <= IDC_SCROLLBAR6; ++i)
  16.                         SetScrollInfo(GetDlgItem(hDlg, i), SB_CTL, &si, FALSE);
  17.                 Ret = TRUE;
  18.                 break;

  19.         case WM_CTLCOLORSTATIC:
  20.                 {
  21.                         TCHAR buf[128];
  22.                         BOOL Cheak = FALSE;                //标记位,只修改IDC_STATIC1 - IDC_STATIC3
  23.                         switch (GetDlgCtrlID((HWND)lParam))
  24.                         {
  25.                         case IDC_STATIC1:
  26.                                 wsprintf(buf, TEXT("%03d"), R);
  27.                                 Cheak = TRUE;
  28.                                 break;

  29.                         case IDC_STATIC2:
  30.                                 wsprintf(buf, TEXT("%03d"), G);
  31.                                 Cheak = TRUE;
  32.                                 break;

  33.                         case IDC_STATIC3:
  34.                                 wsprintf(buf, TEXT("%03d"), B);
  35.                                 Cheak = TRUE;
  36.                                 break;
  37.                         }
  38.                         if(Cheak)
  39.                                 SetWindowText((HWND)lParam, buf);
  40.                         Ret = TRUE;
  41.                 }
  42.                 break;

  43.         case WM_CTLCOLORLISTBOX:
  44.                 ListBoxBrush = CreateSolidBrush(RGB(R, G, B));
  45.                 return (LRESULT)ListBoxBrush;

  46.         case WM_CTLCOLORSCROLLBAR:
  47.                 switch (GetDlgCtrlID((HWND)lParam))                //根据ID来判断要更改的滚动条
  48.                 {
  49.                 case IDC_SCROLLBAR4:
  50.                         HVScrollBrush = CreateSolidBrush(RGB(R, 0, 0));                //创建画刷
  51.                         break;

  52.                 case IDC_SCROLLBAR5:
  53.                         HVScrollBrush = CreateSolidBrush(RGB(0, G, 0));                //创建画刷
  54.                         break;

  55.                 case IDC_SCROLLBAR6:
  56.                         HVScrollBrush = CreateSolidBrush(RGB(0, 0, B));                //创建画刷
  57.                         break;
  58.                 }
  59.                 return (LRESULT)HVScrollBrush;                                                //返回画刷句柄

  60.         case WM_VSCROLL:
  61.                 DeleteObject(ListBoxBrush);
  62.                 DeleteObject(HVScrollBrush);                                                //删除画刷
  63.                 si.fMask = SIF_POS;
  64.                 GetScrollInfo((HWND)lParam, SB_CTL, &si);
  65.                 switch (LOWORD(wParam))
  66.                 {
  67.                 case SB_LINEUP:                                //上箭头
  68.                         if (si.nPos > 0)
  69.                                 --si.nPos;
  70.                         break;

  71.                 case SB_LINEDOWN:                        //下箭头
  72.                         if (si.nPos < 255)
  73.                                 ++si.nPos;
  74.                         break;

  75.                 case SB_THUMBTRACK:                        //滑块的拖动
  76.                         si.nPos = HIWORD(wParam);
  77.                         break;
  78.                 }
  79.                
  80.                 //根据ID来判断滚动条
  81.                 switch (GetDlgCtrlID((HWND)lParam))
  82.                 {
  83.                 case IDC_SCROLLBAR4:
  84.                         R = si.nPos;                //保存红色色号,并重新绘制静态文本框
  85.                         InvalidateRect(GetDlgItem(hDlg, IDC_STATIC1), NULL, FALSE);
  86.                         break;

  87.                 case IDC_SCROLLBAR5:        //保存绿色色号,并重新绘制静态文本框
  88.                         G = si.nPos;
  89.                         InvalidateRect(GetDlgItem(hDlg, IDC_STATIC2), NULL, FALSE);
  90.                         break;

  91.                 case IDC_SCROLLBAR6:        //保存蓝色色号,并重新绘制静态文本框
  92.                         B = si.nPos;
  93.                         InvalidateRect(GetDlgItem(hDlg, IDC_STATIC3), NULL, FALSE);
  94.                         break;
  95.                 }
  96.                 InvalidateRect(GetDlgItem(hDlg, IDC_LIST1), NULL, FALSE);
  97.                 SetScrollInfo((HWND)lParam, SB_CTL, &si, TRUE);
  98.                 Ret = TRUE;
  99.                 break;

  100.         case WM_CLOSE:
  101.                 DestroyWindow(hDlg);
  102.                 Ret = TRUE;
  103.                 break;

  104.         case WM_DESTROY:
  105.                 SendMessage(GetParent(hDlg), WM_DESTROY, 0, 0);
  106.                 Ret = TRUE;
  107.                 break;
  108.         }

  109.         return Ret;
  110. }
复制代码
       

大家尽量每个帖子的功能都可以试一下,来感受一下软件一步一步完成的感觉

传送门:对话框(非模式)调色板③
传送门:对话框(非模式)调色板⑤
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 12:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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