VC实现类似Windows的颜色选择器
2009-05-29 20:05:43 来源:WEB开发网在程序退出时,需要销毁创建的窗口,此时可以使用::DestroyWindow()、::UnregisterClass()来实现。
上面的只是创建了显示颜色表的窗口,关键的部分是要在窗口中显示各种颜色,动态的获取、设置颜色。为了显示各种颜色,例子中分成两个步骤来实现,第一步是处理窗口的WM_ERASEBKGND消息,显示颜色表的背景框架,用黑色的横线、竖线将显示颜色的区域分割成一个个小正方形;第二步是处理窗口的WM_PAINT消息,向各个小方格填充相应的颜色,同时使用CDC::DrawFocusRect()函数根据当前窗口的颜色方格的索引来显示用户选择的颜色方格。为了动态跟踪用户在操纵颜色窗口时选择的颜色,也就是确定当前用户选择的颜色方格的索引,需要处理WM_MOUSEMOVE,它的实现思路是根据鼠标的位置来得到索引值的和颜色值,其中使用了::WindowFromPoint()、GetPixel()、Crect::PtInRect()等关键的函数,它们的功能分别是:从当前鼠标位置得到窗口的句柄、从当前鼠标位置得到颜色值、判断当前鼠标位置是否在某个区域中。但如何得到色彩选择器颜色改变的通知呢?
将一个编辑控件绑定到相显示颜色的窗口很简单,只要在该类中定义个窗口句柄,用它来存放当前绑定到该类的编辑框的句柄就可以了。
在使用该类的过程中,按钮的BN_CLICKED的单击事件已经成了颜色改变的事件了。我们只要像添加按钮单击处理函数一样即可添加颜色改变处理函数。在处理函数里我们可以通过COLORREF CColorPicker::GetColor()函数得到COLORREF类型的颜色值,或者通过void CColorPicker::GetColor(CString& strColor)函数直接得到型如#FFFFFF样式的字符串。
下面就让我们来看看CColorPicker类的具体使用步骤吧!
更多精彩
赞助商链接