Is there a way in mfc slider control that as i move the thumb, it fills the background color of the slider over the default background color(在MFC滑块控件中有没有一种方法,当我移动拇指时,它会在默认背景色上填充滑块的背景色)
本文介绍了在MFC滑块控件中有没有一种方法,当我移动拇指时,它会在默认背景色上填充滑块的背景色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试在mfc中创建自定义滑块。是否有办法使我在移动滑块时,背景颜色会根据滑块拇指在默认背景颜色上的位置而变化,就像.Net中的默认.Net滑块一样。
void rogreen::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CStatic::OnPaint() for painting messages
CRect rectWindow;
GetClientRect(&rectWindow);
CRect rect;
GetClientRect(&rect);
int r1 = { 0 }, g1 = { 255 }, b1 = { 0 }; //Any start color
int r2 = { 0 }, g2 = { 0 }, b2 = { 0 }; //Any stop color
for (int i = 0;i < rect.Height();i++)
{
int r, g, b;
r = r1 + (i * (r2 - r1) / rect.Height());
g = g1 + (i * (g2 - g1) / rect.Height());
b = b1 + (i * (b2 - b1) / rect.Height());
dc.FillSolidRect(0, i, rect.Width(), 1, RGB(r, g, b));
}
}
推荐答案
使用https://docs.microsoft.com/en-us/windows/win32/gdi/drawing-a-shaded-rectangle中的示例,您可以处理如下WM_CTLCOLORSTATIC
消息:
case WM_CTLCOLORSTATIC:
{
if (::GetDlgItem(hDlg, IDC_SLIDER) == (HWND)lParam) {
HDC hdc = (HDC)wParam;
RECT r = {};
::GetClientRect((HWND)lParam, &r);
// Create an array of TRIVERTEX structures that describe
// positional and color values for each vertex. For a rectangle,
// only two vertices need to be defined: upper-left and lower-right.
TRIVERTEX vertex[2];
vertex[0].x = 0;
vertex[0].y = 0;
vertex[0].Red = 0x0000;
vertex[0].Green = 0x8000;
vertex[0].Blue = 0x8000;
vertex[0].Alpha = 0x0000;
vertex[1].x = r.right; // 400;
vertex[1].y = r.bottom; // 40;
vertex[1].Red = 0x0000;
vertex[1].Green = 0xd000;
vertex[1].Blue = 0xd000;
vertex[1].Alpha = 0x0000;
// Create a GRADIENT_RECT structure that
// references the TRIVERTEX vertices.
GRADIENT_RECT gRect;
gRect.UpperLeft = 0;
gRect.LowerRight = 1;
// Draw a shaded rectangle.
GradientFill(hdc, vertex, 2, &gRect, 1, GRADIENT_FILL_RECT_V);
return (INT_PTR)::GetStockObject(NULL_BRUSH);
}
}
您可以使用滑块的位置计算所需的颜色值。
这篇关于在MFC滑块控件中有没有一种方法,当我移动拇指时,它会在默认背景色上填充滑块的背景色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在MFC滑块控件中有没有一种方法,当我移动拇指时,它会在默认背景色上填充滑块的背景色
基础教程推荐
猜你喜欢
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++,'if' 表达式中的变量声明 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31