qq1242009750 发表于 2018-7-11 22:56:43

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

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

今天给大家展示一个用对话框写的调色板,原理很简单,下面听我一一道来
首先发一张图,给大家看看效果吧!


功能说明:
1.使用三原色来调配颜色
2.三种原色都配备一个滚动条
3.滚动条下方是对应原色的色号,比如果R滚动条下面的显示20,那么当前红色的色号为20
4.右边的色板是三原色的组合
5.使用了自绘制按钮来实现操作说明对话框的弹出

下面我们来挪列一下要用到的消息和函数还有程序的思路:
※由于我们用的是对话框,所以滚动条和按钮都可以从工具栏拖拽到对话框中
1.由于我们用非模式对话框来模拟模式对话框,所以我们在创建主窗口的时候不要让主窗口显示出来,所以要把ShowWindow函数和WS_VISIBLE风格去掉
2.在主窗口创建消息里(WM_CREATE)创建一个非模式对话框,此对话框要用CreateDialog函数来创建,并用一个全局变量来接受它的返回值
3.既然用到了非模式对话框,那么就要在消息循环里抓取它的消息,因为消息循环里有主窗口的消息也有非模式对话框的消息,所以我们要用IsDialogMessage函数来判断消息的来源,消息循环里我们只派发和翻译主窗口的消息
4.应为原色的范围是 0 - 255,所以滚动条的范围要和原色一致(0 - 255) 可以用SetScrollInfo函数来设置
5.滚动条背景可以显示当前原色的颜色,当原色色号为0时显示黑色,色号用全局变量保存
6.改变滚动条的背景颜色可以用WM_CTLCOLORSCROLLBAR消息来改变,此消息要返回一个画刷句柄,此句柄就是滚动条背景色的句柄
7.当滚动条被拖动或两边按键被点击时,要能正确相应消息,滚动条被拖动或两边按键会发送WM_VSCROLL下的SB_THUMTRACK(拖动)、SB_LINEUP、SB_LINEDOWN消息
8.滚动条滚动完毕后也要改变对应的色号,并在滚动条的下方显示出来
9.每当我们有色号发生改变都要改变我们右边色板的颜色
10.因为右边的色板是用ListBox做的,所以要改变ListBox的背景色
11.改变LisBox的背景色可以用WM_CTLCOLORLISTBOX消息来改变,此消息要返回一个画刷句柄,此句柄就是ListBox背景色的句柄
12.自绘制按钮用到了一个WM_DRAWITEM的消息,可以在这个消息里面来绘制按钮
13.按钮按下时,背景变成红色,并弹出模态对话框


传送门:对话框(非模式)调色板②
页: [1]
查看完整版本: 对话框(非模式)调色板①