动态修改Static控件边框颜色...

test_2012_12 2012-12-25 10:22:51
//OCX上绘4个Static控件,单击控件,修改边框颜色,好像就第一次管用,
//后面再单击都不起作用了。


//4个Static控件映射单击函数
ON_STN_DBLCLK(IDC_TestStatic_1, OnDoubleclickedButton1)
ON_STN_DBLCLK(IDC_TestStatic_2, OnDoubleclickedButton2)
ON_STN_DBLCLK(IDC_TestStatic_3, OnDoubleclickedButton3)
ON_STN_DBLCLK(IDC_TestStatic_4, OnDoubleclickedButton4)

//创建Static控件
CTestOCXCtrl::CTestOCXCtrl()
{
InitializeIIDs(&IID_DTestOCX, &IID_DTestOCXEvents);

// TODO: Initialize your control's instance data here.
CRect rcSize;
GetClientRect(rcSize);
m_static_1.DestroyWindow();
m_static_2.DestroyWindow();
m_static_3.DestroyWindow();
m_static_4.DestroyWindow();

//1
CRect rcStatic_1(rcSize.left, //x
rcSize.top,
rcSize.left+(rcSize.Width()/2), //x
rcSize.top + (rcSize.Height() / 2));

//3
CRect rcStatic_3(rcSize.left, //x
rcSize.top + (rcSize.Height() / 2),
rcSize.left+(rcSize.Width()/2), //x
rcSize.top + (rcSize.Height()));

//2
CRect rcStatic_2(rcSize.left+rcSize.Width()/2, //x
rcSize.top ,
rcSize.left+ rcSize.Width(), //x
rcSize.top + rcSize.Height()/2);

//4
CRect rcStatic_4(rcSize.left+rcSize.Width()/2, //x
rcSize.top + rcSize.Height()/2,
rcSize.left+rcSize.Width(), //x
rcSize.top + rcSize.Height());

m_static_1.Create("Video-1", WS_CHILD|WS_VISIBLE|SS_NOTIFY, rcStatic_1, this, IDC_TestStatic_1);
m_static_2.Create("Video-2", WS_CHILD|WS_VISIBLE|SS_NOTIFY, rcStatic_2, this, IDC_TestStatic_2);
m_static_3.Create("Video-3", WS_CHILD|WS_VISIBLE|SS_NOTIFY, rcStatic_3, this, IDC_TestStatic_3);
m_static_4.Create("Video-4", WS_CHILD|WS_VISIBLE|SS_NOTIFY, rcStatic_4, this, IDC_TestStatic_4);
}

//单击Static_1
void CTestOCXCtrl::OnStatic1()
{
// AfxMessageBox("单击Static-1");
CStatic* pStatic = NULL;
LONG style = 0;

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_1);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_BLACKFRAME; //1
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_2);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_3);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_4);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

m_static_1.Invalidate(TRUE);
m_static_2.Invalidate(TRUE);
m_static_3.Invalidate(TRUE);
m_static_4.Invalidate(TRUE);
this->Invalidate(TRUE);
}

//单击Static_2
void CTestOCXCtrl::OnStatic2()
{
// AfxMessageBox("单击Static-2");
CStatic* pStatic = NULL;
LONG style = 0;

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_1);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_2);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_BLACKFRAME; //2
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_3);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_4);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

m_static_1.Invalidate(TRUE);
m_static_2.Invalidate(TRUE);
m_static_3.Invalidate(TRUE);
m_static_4.Invalidate(TRUE);
this->Invalidate(TRUE);
}

//单击Static_3
void CTestOCXCtrl::OnStatic3()
{
// AfxMessageBox("单击Static-3");
CStatic* pStatic = NULL;
LONG style = 0;

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_1);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_2);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_3);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_BLACKFRAME; //3
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_4);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

m_static_1.Invalidate(TRUE);
m_static_2.Invalidate(TRUE);
m_static_3.Invalidate(TRUE);
m_static_4.Invalidate(TRUE);
this->Invalidate(TRUE);
}

//单击Static_4
void CTestOCXCtrl::OnStatic4()
{
// AfxMessageBox("单击Static-4");
CStatic* pStatic = NULL;
LONG style = 0;

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_1);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_2);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_3);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_WHITEFRAME; //白色边框
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_4);
//style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= WS_CHILD;
style |= WS_VISIBLE;
style |= SS_NOTIFY;
style |= SS_BLACKFRAME; //4
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE, style);

m_static_1.Invalidate(TRUE);
m_static_2.Invalidate(TRUE);
m_static_3.Invalidate(TRUE);
m_static_4.Invalidate(TRUE);
this->Invalidate(TRUE);
}


==========================
OCX上绘4个Static控件,单击控件,修改边框颜色,好像就第一次管用,
后面再单击都不起作用了。

想要实现的功能,单击Static_1,2,3,4中一个控件时,单击选中的控件边框显示黑色,
其他三个边框显示白色。
...全文
338 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzongze1015 2014-01-14
  • 打赏
  • 举报
回复
楼主解决么?
test_2012_12 2012-12-25
  • 打赏
  • 举报
回复
用下面几行代码来修改Static控件的边框颜色。
CRect ocxRect;
CStatic* pStatic = NULL;
pStatic = (CStatic*)GetDlgItem(IDC_TestStatic_2);
pStatic->GetClientRect(&ocxRect);
CDC *pDC = pStatic->GetDC();
pDC->FillSolidRect(ocxRect.left, ocxRect.top, 
ocxRect.Width(), ocxRect.Height(), RGB(255,255,255));
this->Invalidate(TRUE);
test_2012_12 2012-12-25
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
你这个是想要模拟radio button的效果。 怎么不自绘CStatic控件,添加处理WM_PAINT消息。 判断是否是当前点击的控件,如果是绘制黑色边框,否则绘制白色边框即可。
==================== 不用继承 CStatic类 也可以实现吧? 直接在CTestOCXCtrl类里面添加Paint事件,来处理 CStatic对象的边框的重绘。
Eleven 2012-12-25
  • 打赏
  • 举报
回复
你这个是想要模拟radio button的效果。 怎么不自绘CStatic控件,添加处理WM_PAINT消息。 判断是否是当前点击的控件,如果是绘制黑色边框,否则绘制白色边框即可。
test_2012_12 2012-12-25
  • 打赏
  • 举报
回复
========================== OCX上绘4个Static控件,单击控件,修改边框颜色,好像就第一次管用, 后面再单击都不起作用了。 想要实现的功能,单击Static_1,2,3,4中一个控件时,单击选中的控件边框显示黑色, 其他三个边框显示白色。
lj10309598 2012-12-25
  • 打赏
  • 举报
回复
我想应该是调用控件自身的绘制函数重画一遍

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧