特定条件時の色変更について

解決


入門者  2010-02-16 04:43:01  No: 71402

スタティックテキストの色変更について。

起動時にCOM情報がエラーの時は、赤文字にしたいのですが
調べながら色々試しているのですが、なかなかうまくできません。
どなたかご教示ください。

環境:VC++、MFC

HBRUSH CDataWriting::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

  // TODO:  ここで DC の属性を変更してください。

  // ダイアログの色変更
    if (nCtlColor == CTLCOLOR_DLG)
    {
        if (*pWnd == *this)
        {
            // 背景色
            hbr = static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));
        }
    }

    int ID = pWnd->GetDlgCtrlID();

    switch(ID) {
    case IDC_STATIC_COM_INFO:  
        pDC->SetTextColor(RGB(0,255,0));   // 文字色緑
        pDC->SetBkColor(RGB(0,0,0));       // 文字背景色黒
    break;
    case IDC_GRP_OPE:      
        pDC->SetTextColor(RGB(255,255,0)); // 文字色黄
        pDC->SetBkColor(RGB(0,0,0));       // 文字背景色黒
    break;
    case IDC_GRP_PRO_REP:       /
        pDC->SetTextColor(RGB(255,0,0));   // 文字色赤
        pDC->SetBkColor(RGB(0,0,0));       // 文字背景色黒
    break;
  case IDC_GRP_SET:      
        pDC->SetTextColor(RGB(0,0,255));   // 文字色緑
        pDC->SetBkColor(RGB(0,0,0));       // 文字背景色黒
    break;
  case IDC_STATIC_COM_INFOMATION:    
        pDC->SetTextColor(RGB(0,255,0));   // 文字色緑
        pDC->SetBkColor(RGB(0,0,0));       // 文字背景色黒
    break;

  
  case IDC_STATIC_OPE:
    pDC->SetTextColor(RGB(255,255,0));
    pDC->SetBkColor(RGB(0,0,0));
    break;
  case IDC_STATIC_PROREP:
    pDC->SetTextColor(RGB(255,0,0));
    pDC->SetBkColor(RGB(0,0,0));
    break;
  case IDC_STATIC_SETTING:
    pDC->SetTextColor(RGB(0,255,255));
    pDC->SetBkColor(RGB(0,0,0));
    break;
    }

  // TODO:  既定値を使用したくない場合は別のブラシを返します。
  return hbr;
}

BOOL CDataWriting::OnInitDialog()
{
  CDialog::OnInitDialog();

  【中略】

   
  /*初期表示*/
  asd.Format("【%5s:%6s,%s%s%s】",m_StataPort,w_StataBaud,w_statepali,w_StataBit,w_statestop) ;
  
  /*Com判定*/
  if(com_check){
      m_ddx_v_com_info = asd;
    }
  else{  
      CWnd* pWnd = GetSafeHwnd();        ここに文字色を赤にする記述を書きたい
        //CDC* pDC = GetDlgItem(IDC_STATIC_COM_INFO) ->GetDC();
        //CDC test = GetDC(hWnd);
        //::SetTextColor(hWnd,RGB(255,0,0));
        //HDC GetDC(HWND hWnd);
        //CDC* pDC = GetDlgItem(IDC_STATIC_COM_INFO) ->GetDC();
      CDC* pDC;
      pDC = pWnd->GetDlgCtrlID();
        //CDC* pDC ->
      pDC -> SetTextColor(RGB(255,0,0));   // 文字色赤
      pDC -> SetBkColor(RGB(0,0,0));       
      m_ddx_v_com_info =  "【Non-connection】";

    };

        /*CDC* pDC = (CDC*)GetDlgItem(IDC_STATIC_COM_INFO);
          pDC -> SetTextColor(RGB(255,0,0));
          pDC -> SetBkColor(RGB(0,0,0));
                    */
  
        //CWindowDC dc(this);
        //CSize sizesize = dc.GetTextExtent(m_ddx_v_com_info);
        //CEdit* editedit = (CEdit*)GetDlgItem(IDC_STATIC_COM_INFO);
        //editedit->SetWindowPos(editedit,0,0,sizesize.cx-96,12,SWP_NOMOVE|SWP_NOZORDER);
        //CButton *Btn = (CButton*)GetDlgItem(IDC_BTN_SEND);
        //Btn->EnableWindow(FALSE);  // 無効

  UpdateData(FALSE);

  return FALSE;      // return TRUE unless you set the focus to a control
        // 例外 : OCX プロパティ ページは必ず FALSE を返します。
}


入門者  2010-02-16 05:17:02  No: 71403

色々、調べていたら解決しました。
お騒がせしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加