MFC-插入符的创建

22:12:25本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6218597.html

1、插入符(Caret)的创建与显示

插入符用于标定输入信息位置的闪烁竖线,MFC中创建插入符可以直接使用CWnd类的CreateSolidCaret()函数来完成,其函数原型为void CreateSolidCaret(int nWidth,int nHeight),两个参数分别表示插入符的宽度和高度。

新建一个工程,添加WM_CREATE消息的响应函数OnCreate(),添加创建插入符函数,运行,结果并没有出现插入符。因为我们所创建的插入符在初始时是隐藏状态,如需显示还要调用ShowCaret()函数进行显示。结果如图示,插入符已经显示出来了。

代码:

2、插入符的格式设置

  插入符的格式即其大小主要是由当前文本格式决定,因此需要获取当前文本格式。调用CDC类的GetTextMetrics成员函数可以获得设备描述表中当前字体的度量信息,其参数是一个TEXTMETRIC结构体类型的变量,计算插入符的高度和宽度用的是字体的高度和平均宽度,这两个正是结构体的成员tmMaxCharWidth和tmAveCharWidth。

代码如下:

//创建设备描述表
CClientDC dc(this);
//定义文本信息结构体变量
TEXTMETRIC tm;
//获得设备描述表中的文本信息
dc.GetTextMetrics(&tm);
//根据字体大小创建合适的插入符
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
//显示已创建的插入符
ShowCaret();

运行,结果如图所示:

备注:字体的平均宽度除以8得到插入符的宽度只是一个经验值。

3、创建图形插入符

要创建图形插入符,可以用CreateCaret函数实现,首先要创建一个位图资源,在View菜单下打开Resource View,在资源视图的资源文件上右击选择Add Resource,选择Bitmap->New,利用Pencil Tool工具在位图面板进行绘制,如图示:

代码如下:

CBitmap bitmap;
bitmap.LoadBitmapW(IDB_BITMAP1);
CreateCaret(&bitmap);
ShowCaret();

  运行发现并没有出现预期结果,为什么呢?因为bitmap是一个局部变量,当OnCreate函数执行完成后,此bitmap对象会发生析构。通常,与资源关联的对象在析构时会把与之关联的资源销毁,于是就没有出现位图插入符。解决方法是将局部位图对象修改为CTextView类的成员变量,将其定义放到CTextView的头文件中。

运行,结果如图所示:

  说明图形插入符已经实现了。

如果有疑问,可以联系[email protected],更多内容请参考:http://www.cnblogs.com/mxbs/,技术交流请加QQ群:586571286。

时间: 2024-10-10 05:57:03

MFC-插入符的创建的相关文章

创建插入符及插入符操作

插入符的创建应该在窗口创建之后进行,可以在WM_CREATE消息的响应函数中创建.(注意,视类窗口覆盖在框架窗口之上) 一.创建普通插入符 int CDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 TEXTMETRIC tm; CClientDC dc(this); dc.GetTextMe

文本插入符和图形插入符

1.1创建文本插入符 CWnd类的CreateSolidCaret()函数: void CreateSolidCaret( int nWidth, int nHeight ); 例:Text 利用MFCAppWizard创建单文档视图工程,插入符的创建应该在窗口创建之后进行,可以在WM_CREATE消息的响应函数OnCreate中添加创建插入符的代码.MFCAppWizard所生成的CTextView类中没有OnCreate函数,利用MFC类向导为CTextView类添加WM_CREATE消息的

创建位图插入符

CWindow::CreateCaret//图形插入符 //CreateSolidCaret 插入符 BOOL CreateCaret( HBITMAP pBitmap ); int CXuexi2View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; //调用Windows处理函数对应的create // TODO: Add your specia

【Windows编程】系列第十篇:文本插入符

大家知道,在使用微软的编程环境创建工程时会让你选择是控制台模式还是Windows应用程序.如果选择控制台的console模式,就会在运行时出现一个黑洞洞的字符模式窗口,里面就有等待输入一闪一闪的插入符.输入光标从DOS时代就存在,但是在Win32中赋予了更强大的功能.下图就是Windows的CMD窗口,其中的输入点就是插入光标: 要注意的是这里的插入符或插入光标并不是Windows中另外一个"光标",这里是指示插入字符的位置,而不是用于鼠标,手写输入等可以定位.移动的光标(Cursor

MYSQL_与excel结合在excel中用&连接符快速创建表头_20161125

excel &连接符快速创建表头 复制c列内容 CREATE TABLE A0001restaurant ( #用户明细表 城市 VARCHAR(255), 区块 VARCHAR(255), 用户ID INT(11), 用户名称 VARCHAR(255), 用户地址 VARCHAR(255), 门牌号 VARCHAR(255), 收货人 VARCHAR(255), 联系电话 VARCHAR(255), 用户类型一级 VARCHAR(255), 用户类型二级 VARCHAR(255), 注册时间0

[Step-By-Step Angular2](2)数据绑定之插入符和单向绑定

在mvc/mvvm类框架出现之前,开发者通常需要手动更新html并维护html与数据之间的关系.随着mvc思想在前端社区的普及和发展,view层和model层的解耦和分离机制已经是各框架的标配了.令人欣喜的是,angular2在现有各框架的理论基础上对数据绑定重新进行了抽象,在架构上进行了革新,很有借鉴意义.从本文起我们就将开始讨论angular2中的数据绑定. angular2中有四种数据绑定:插入符(interpolation).单向绑定(one-way binding).事件绑定(even

插入光盘,创建挂载点,挂载设备,安装rpm包

插入光盘: 创建挂载点: 创建挂载点. 挂载设备:或者mount /dev/sr0 /mnt/cdrom 安装rpm包: [[email protected] Packages]# rpm -ivh mysql-connector-odbc-5.2.5-6.el7.x86_64.rpm [选项说明:i安装install,v显示详细信息verbose,h显示安装过程hash,--nodeps不检查依赖性] 警告:mysql-connector-odbc-5.2.5-6.el7.x86_64.rpm

MFC 程序 手写创建顺序

MFC 程序 手写创建顺序 1.继承CWinApp类 覆盖 class CMyApp : public CWinApp { virtual BOOL InitInstance(); } BOOL CMyApp::InitInstance() { CMyFrameWnd *pWnd = new CMyFrameWnd(); pWnd->ShowWindow(SW_SHOW); m_pMaindWnd = pWnd; return TRUE; } 2.继承 CFrameWnd类 class CMyF

MFC动态按钮的创建及其消息响应(自定义消息)

动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 10000 2.在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针) 3.手动释放对象指针 下面是动态生成多个按钮的例子: CButton* btn = new CButton[5]; DWORD dwStyle = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON; for(int i = 0; i < 5; i++) { btn[i]