:
CFont m_font; LOGFONT m_lf; 用来创建字体和保存当前的字体信息。 (2) 在视图类的定义.h 文件中修改 m_ctrlEdit 的定义为 CMyEdit * m_ctrlEdit; (3) 修改视图类的 OnInitialUpdate 函数为:
// CTextview_1View message handlers void CTextview_1View::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class CRect rcClient; GetClientRect( rcClient ); // 获取当前视图的客户区大小 m_ctrlEdit; if ( m_pCtrlEdit ) delete m_ ; m_ctrlEdit= new CMyEdit(); CMyEdit m_ctrlEdit->Create( ES_MULTILINE | WS_CHILD | WS_VISIBLE |ES_WANTRETURN /* | WS_HSCROLL | ES_AUTOHSCROLL // 自动水平滚动*/ // 自动垂直滚动 | WS_VSCROL
L | ES_AUTOVSCROLL , rcClient, this, 201); // 创建多行编辑控件 CTextview_1Doc* pDoc = GetDocument(); // 获取与视图相关联的文档指针 // 以下是将文档中的 m_strContent 内容全部赋给 str CString str; int nLines = (int)pDoc->m_strContent.GetSize(); for ( int i=0; i
m_strContent.GetAt( i ); str = str + "\r\n"; // 换行(CString 会自动吃掉回车换行符) } m_ctrlEdit->SetTabStops( 16 ); m_ctrlEdit->SetWindowText( str ); } // 设置 Tab 符大小 // 将文档内容传给控件
(4) 为 CMyEdit 的鼠标左键双击消息添加处理函数,以利用字体对话框设置和创建字体:
// CMyEdit message handlers void CMyEdit::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CFontDialog dlg(&;m_lf); if(dlg.DoModal()==IDOK) { //memcpy(&;m_lf, dlg.m_cf.lpLogFont, sizeof(LOGFONT)); dlg.GetCurrentFont(&;m_lf); m_font.DeleteObject(); m_font.CreateFontIndirect CreateFontIndirect(&;m_lf); CreateFontIndirect SetFont(&;m_font); } CEdit::OnLButtonDblClk(nFlags, point); }
(5) 设置编辑框初始显示时使用的字体,为 CMyEdit 的 WM_CREATE 消息添加处理函数: //创建编辑框,此时设置显示用的默认字体为宋体 int CMyEdit::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CEdit::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here
}
//创建使用的默认字体 memset(&;m_lf, 0, sizeof(LOGFONT)); CreateFont( 16, m_font.CreateFont CreateFont 0, 0, 0, FW_NORMAL,/*FW_BOLD,*/ FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, TEXT( "宋体")); GetLogFont(&;m_lf); m_font.GetLogFont GetLogFont SetFont(&;m_font); SetFont return 0;
//
nHeight // // // // // // // // // // // // //
nWidth nEscapement nOrientation nWeight bItalic bUnderline cStrikeOut nCharSet nOutPrecision nClipPrecision nQuality nPitchAndFamily 保存设置的字体参数到结构中
OK,到此完成了:双击弹出设置字体窗口,设置字体后,显示窗口会自动刷新,用新字体来 显示。
参考:
II、VC 怎么触发文本框双击事件? 、 怎么触发文本框双击事件?
[ 标签:vc,文本框,事件 ] wenwen.soso/z/q136107229.htm kiss_xiao/ty 回答:1 人气:1 解决时间:2009-06-11 11:15
对控件进行子类化,以 6.0 为例,"插入" - "类",在类类型选择 MFC Class,输入类名,如 CMyEdit,Base Class 选择 CEdit,确定,再在类视图中点击 CMyEdit 右键,选择 Add Windows Message Handles,选择 WM_LBUTTONDBLCLK 鼠标左键双击事件,重载这个函数,接着为你需 要添加双击事件的 Edit 控件添加控件变量,类名为 CMyEdit
提问人的追问 2009-06-11 09:25
月儿的答案我考虑过了,我也自己继承了 CEdit 这个类,然后添加了双击事件,但是假如我 有 10 个 cedit 控件,我不能把这个 10 个要执行
的函数都写着个类里面把,因为窗体捕获不 到 edit 控件是否双击啊
回答人的补充 2009-06-11 09:29
你都没有看完我写的,添加控件变量,以派生的类名作为控件类,通过这个操作后, DDX_Control 会对控件进行消息映射,这样你双击控件自然会触发派生类中双击事件的发生, 这样的你绑定 100 个 edit 都会触发这个事件。 通过 GetDlgCtrlID 可以知道哪个 Edit 触发的双击事件
III、VC 如何修改编辑框内的字体?(原创) 、 如何修改编辑框内的字体? 原创)
总言之,就是调用控件类 CEdit(或其子类 CMyEdit)的对象的 SetFont 方法,
传入事先创建好的字体对象的指针,来设置字体。笔者采用了子类化的方法, 由 CEdit 共有派生出 CMyEdit。