1 如何让Edit控件支持多行?
  我设置了MultiLine,然后屏蔽掉了Dialog的回车键(防止程序退出),但是在Edit控件中输入回车的时候,并没有换行?而是将焦点移到“确定”按钮了。怎么办?2 高手说可以重载CEdit类,使之支持PreTranslateMessage,
  但是具体怎么操作啊?
  我的意思是:是 CMyEdit::CEdit这样吗?
  然后又怎么创建一个CMyEdit呢?
( 上面的这个是不是就是所谓的“之类化”?)3
void CMyDlg::OnPaint() 
{
 CDialog::OnPaint();
 
 CPaintDC dc(this);
 dc.Rectangle(20,20,300,300); 
}为什么画不出来?
但是将二者位置颠倒一下可以的啊?
就是这样:
 CPaintDC dc(this);
 dc.Rectangle(20,20,300,300);  CDialog::OnPaint();
可以的啊4
_AFX_INLINE CString::operator LPCTSTR() const
{ return m_pchData; }
它怎么可以重载LPCTSTR?
C++书籍上都说不可以的啊!我自己试了给自己编的类重载此操作符也是不可以的啊!

解决方案 »

  1.   

    2 高手说可以重载CEdit类,使之支持PreTranslateMessage,
      但是具体怎么操作啊?
      我的意思是:是 CMyEdit::CEdit这样吗?
      然后又怎么创建一个CMyEdit呢?
    ( 上面的这个是不是就是所谓的“之类化”?)在类视图中,右键--->Add a New Class,输入你的类名,把基类选择为CEdit即可
      

  2.   

    子类化,也就是自己写一个类,继承原有的基类,而自己重载其中的函数,实现特殊的处理过程。你可以参考这样一篇文章:
    http://www.xiaozhou.net/ReadNews.asp?NewsID=868
      

  3.   

    第一个问题:把CEdit的“Want Return”设成“true”就应该可以了。
      

  4.   

    2 高手说可以重载CEdit类,
    重载是C++的一个基本概念,就像不懂指针不能说会C一样,不懂重载就是没学好C++,因此这个基础知识你还需要补习。
    3
    void CMyDlg::OnPaint() 
    {
     CDialog::OnPaint();
     
     CPaintDC dc(this);
     dc.Rectangle(20,20,300,300); 
    }
    为什么画不出来?因为CPaintDC相当于调用了SDK中的BeginPaint()和EndPaint(),处理了WM_PAINT消息,使用CPaintDC得到的DC只对无效矩形区进行绘制。调用了CDialog::OnPaint(),里面也用到了CPaintDC(),处理完后无效矩形区没有了,下面的工作就不再进行绘制。
    但是将二者位置颠倒一下可以的啊?
    就是这样:
     CPaintDC dc(this);
     dc.Rectangle(20,20,300,300);  CDialog::OnPaint();
    可以的啊
    这时候CPaintDC还没有销毁,无效矩形区还在。4
    _AFX_INLINE CString::operator LPCTSTR() const
    { return m_pchData; }
    它怎么可以重载LPCTSTR?
    C++书籍上都说不可以的啊!我自己试了给自己编的类重载此操作符也是不可以的啊!哪本书上说不可以?除了极少数操作符不能重载,一般都可以的。你是的肯定不对。要深入了解操作符重载,建议看看Effective C++和More Effective C++。
      

  5.   

    第二个问题:
    不用动态创建的。
    你先用向导生成一个class CMyEdit : public CEdit。
    然后在对话框中拉出一个 Edit Control,
    接着在对话框的头文件中声明 CMyEdit m_Edit1;
    在OnInitDialog()函数中加上:Edit1.SubclassDlgItem(IDC_STATIC, this);
    就可以了。
      

  6.   

    谢谢耗子,
    你的应该是:
    CMyEdit m_Edit1;
    m_Edit1.SubclassDlgItem(IDC_STATIC, this);
    吧!可是我按照此方法,派生了一个CMyEdit,结果一回车就错误了。
    你可以帮我试试看吗?
    之前我设置了窗体中某个Edit的MultiLine和WantReturn,这没影响吧?
      

  7.   

    to耗子,
    我重新写个工程测试好的。
    刚才可能其他的问题,明天我重新看一下罢
    谢谢了ps.我没有用你的SubclassDlgItem之类,
    而是直接创建MemberVariable时,选择control-CMyEdit,
    你说的两步我一个也没有做。
    但是好用的。
    这样没问题吧?
      

  8.   

    另外confirm一下:第二个问题是不是就是“子类化”?
      

  9.   

    SubclassDlgItem是一个方法,直接把对话框对象的类改为你的类也可以。
      

  10.   

    酷狗能详细说说吗?
    m_Edit1没有SubclassDlgItem方法啊?怎么回事?不好意思,刚才一时手快结贴了。
      

  11.   

    怎么会没有SubclassDlgItem方法啊?
    只要是CWnd类派生出来的,都会有的啊。