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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章