以前一直用对话框,现在接触SDI感觉不太适应,问几个很简单的问题:
1.在SDI中的加入一个对话框对应了一个类COrder 继承CFormView,如果这个对话框画很大的话,在SDI打开的时候,会出现拉伸条,请问如何使外面的frame 变大.
2.在上面的那个对话框中有一个输入框,如何使输入框中输入的文字的颜色为红色,这个问题SDI和DIALOG都不清楚.
3.如何改变SDI程序的标题, 我在mainframe.cpp中单击状态栏中的一个图标的函数中加入 SetWindowText(_T("fsafsafsdfsdafsda"));就可以实现,但是我把这句话加到CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数里面就不可以,请问如何实现!
谢谢,在线等.

解决方案 »

  1.   

    1.在PreCreateWindow指定cs.cx和cs.cy.
    2.处理WM_CTRLCOLOR.
    3.加载文档后,就改变你的标题了,方法是重载CDocument的OnSetTitle.
      

  2.   

    1.你的Frame启来就让它最大化
    2.字体成红字最简单是继承下CEdit,因为显示什么颜色本来就属于Edit的事儿
    3.其实我觉得用SetWindowText最彻底
      

  3.   

    3
    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE;
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs
    cs.style &= ~FWS_ADDTOTITLE;
    m_strTitle="管理系统"; //修改标题,
    }
    还有用SetWindowText()肯定是可以的。
    在BOOL C***App::InitInstance()里用 m_pMainWnd->SetWindowText();
      

  4.   

    2
     ① 先创建一个基于对话框的工程,命名为test,然后在对话框上加入一个EDIT控件。 
      ② 在testDlg.h中加入一个成员变量:CBrush m_brush; 
      ③ 在OnInitDialog()中,加入m_brush.CreateSolidBrush( RGB(0,0,0 );此处设置的RGB值可以改变的颜色。  
      ④ 点击Class Wizard,给testDlg加入WM_CTLCOLOR事件,单击Edit Code按钮,然后把改函数的内容替换为如下代码:
      if (nCtlColor== CTLCOLOR_EDIT)
       {
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(255,255,255));//此处设置字体的颜色

    return (HBRUSH)m_brush.GetSafeHandle();
       }
      else
        return CDialog::OnCtlColor (pDC, pWnd, nCtlColor);
      

  5.   

    第三个问题解决了,现在还有一个问题就是如何使上述的对话框的背景颜色改为红色,我在COrder::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)函数中加入:pDC->SetBkColor,他只是使字体和输入框的背景颜色改了,别的地方颜色依然没有变,该怎么办??
      

  6.   

    对话框和EDIT一样改
    还是重载OnCtlColor 即WM_CTLCOLOR消息: 
    HBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
      HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
      //在这加一条是否为对话框的判断语句
      if(nCtlColor ==CTLCOLOR_DLG)
           return m_brush;   //返加你自己定义的颜色刷子
      return hbr;
    }
      

  7.   

    在对话框类中定义一个画笔 HBRUSH m_hBrush
    OnInitDialog时初始创建它 m_hBrush = CreateSolidBrush(RGB(0,255,0))
    重载 WndProc
    LRESULT CDlgDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    HWND hEdit = ::GetDlgItem(m_hWnd,IDC_INPUT); if(message == WM_CTLCOLOREDIT && (HWND)lParam == hEdit)
    {
    SetBkMode((HDC)wParam,TRANSPARENT);
    ::SetTextColor((HDC)wParam,RGB(255,0,0));
    return (LRESULT)m_hBrush;
    }
    return CDialog::WindowProc(message, wParam, lParam);
    }