ocx控件 实例(1)

设置ocx控件中的static控件的边框颜色

http://bbs.csdn.net/topics/390327738

//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);          
}
不用继承 CStatic类 也可以实现吧?
直接在CTestOCXCtrl类里面添加Paint事件,来处理 CStatic对象的边框的重绘。

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);




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值