MFC程式設計(三)

calong發表於2020-10-26

頁面佈局如下

MFC程式設計(三)

  • 使用類:
    • CButton:按鈕(包括單選和核取按鈕)
      // 獲取某個單選框按鈕是否被選中
      int checked = ((CButton *)GetDlgItem(IDC_RADIO_NAME))->GetCheck();
      // 設定選中或者非選中
      ((CButton *)GetDlgItem(IDC_RADIO_NAME))->SetCheck(TRUE); // 非選中為FALSE
    • COLORREF:顏色
      // 定義
      COLORREF Color = RGB(r int, g int, b int);
  • 使用方法:
    • CWnd::UpdateWindow:更新視窗顯示
    • CWnd::ScreenToClient(<CRect>):將矩形區域轉化為客戶端座標
    • CWnd::GetDlgItem(IDC_xxx):根據ID獲取某個元件
    • CWnd::GetWindowRect(<CRect>):獲取當前元件的矩形區域

      定義例項框內的Paint區域

      // 視窗類
      class CDemoDlg : public CDialog
      {
      public:
      CRect m_example;
      }
      // 視窗初始化函式
      BOOL CDemoDlg::OnInitDialog()
      {
      CDialog::OnInitDialog();
      // 獲取例項框大小並賦值給 m_ example
      this->GetDlgItem(IDC_SECTION_EXAMPLE)->GetWindowRect(&this->m_example);
      // 將顯示的矩形的座標轉化為客戶端座標
      this->ScreenToClient(&this->m_example);
      // 計算並顯示矩形區域
      int border = (m_example.right - m_example.left) / 7;
      m_example.InflateRect(-border, -border);
      }

      為空間新增變數
      MFC程式設計(三)

為單選框和核取方塊新增事件

// 紅色核取方塊事件
void CDemoDlg::OnCheckRed() 
{
    // TODO: Add your control notification handler code here
    this->m_red = this->IsDlgButtonChecked(IDC_CHECK_RED);
    this->InvalidateRect(&this->m_example);
    this->UpdateWindow();
}
// 綠色核取方塊事件
void CDemoDlg::OnCheckGreen()
{
    // TODO: Add your control notification handler code here
    this->m_green = this->IsDlgButtonChecked(IDC_CHECK_GREEN);
    this->InvalidateRect(&this->m_example);
    this->UpdateWindow();
}
// 藍色核取方塊事件
void CDemoDlg::OnCheckBlue()
{
    // TODO: Add your control notification handler code here
    this->m_blue = this->IsDlgButtonChecked(IDC_CHECK_BLUE);
    this->InvalidateRect(&this->m_example);
    this->UpdateWindow();
}
// 亮色單選框事件
void CDemoDlg::OnRadioLight1()
{
    // TODO: Add your control notification handler code here
    if (this->IsDlgButtonChecked(IDC_RADIO_LIGHT1)) {
        this->m_light = TRUE;
        this->InvalidateRect(&this->m_example);
        this->UpdateWindow();
    }
}
// 暗色單選框事件
void CDemoDlg::OnRadioLight2()
{
    // TODO: Add your control notification handler code here
    if (this->IsDlgButtonChecked(IDC_RADIO_LIGHT2)) {
        this->m_light = FALSE;
        this->InvalidateRect(&this->m_example);
        this->UpdateWindow();
    }
}

視窗繪畫事件

void CDemoDlg::OnPaint() 
{
    if (IsIconic())
    {
        ...
    }
    else
    {
        // 繪製矩形區域
        if (this->IsDlgButtonChecked(IDC_RADIO_LIGHT1)) 
            this->m_light = TRUE;
        COLORREF Color = RGB(
            this->m_red ? (this->m_light == TRUE ? 255 : 128) : 0,
            this->m_green ? (this->m_light == TRUE ? 255 : 128) : 0,
            this->m_blue ? (this->m_light == TRUE ? 255 : 128) : 0
        );
        CBrush Brush(Color);
        CPaintDC dc(this);
        dc.FillRect(&this->m_example, &Brush);
        //呼叫父類方法
        CDialog::OnPaint();
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章