分享
 
 
 

改变插入光标的闪烁速度

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

问题

对于大多数用户来说,插入光标或编辑光标闪烁得太块或太慢都会使他们不易辨别,因此希望能够允许用户来定制插入光标的闪烁速度,以便他们能够较容易地阅读编辑框中的文本并找到它们相应的位置。

方法

在 Windows 9x 可定制的领域里,如果用户想作某种改变而操作系统却不允许改变,这确实是件糟透了的事情,Windows 9x 充分考虑了这一特殊问题,并通过对 API 函数 SetCaretBlinkTime 的简单调用,解决了这一问题。

函数 SetCaretBlinkTime 顾名思义,用来改变编辑域中光标(也就是插入光标)的闪烁速度。与此相伴的函数 GetCaretBlinkTime 用来返回插入光标闪烁速度的当前设置值,当利用诸如 SetCaretBlinkTime 这样的系统函数时,应用程序通常应“考虑周到”,即在完成使用某一属性后,应把它恢复为原来的设置值。插入光标的闪烁速度通常是为 Windows 中的所有应用程序设置的,所以当从自己的编辑窗口中移去光标时,应通过把闪烁速度重新设置为先前的值或缺省的值,来恢复 Windows 的设定。

本节中,将讨论如何在应用程序中减慢或加快光标的闪烁速度。

步骤

按照如下的步骤生成一个例子程序。选择主菜单 Dialog 中的菜单项 Change Caret Blink Speed,会弹出一个对话框。点击按钮 Change Caret Blink,然后在编辑域中点击一下,可以看到插入光标开始正常闪烁。多次点击按钮 Change Caret Blink,每次点击按钮后,在编辑域中点击一下,可以看到插入光标的闪烁速度会发生各种改变,并且在与此按钮相邻的文本域中显示出闪烁速度。

实现例子程序的步骤如下:

1.在 Visual C++ 中利用 App Wizard 创建新的工程 Ld94。进入 App Studio,创建新的对话框,在对话框中,添加标题为 Change Caret Blink 的按钮以及标题为 Speed: Normal、ID 为 IDC_TEXT 的文本域。在对话框中再添加一个编辑域,把按钮 OK 和 Cancel 移到对话框的底部。

2.进入 Class Wizard,为刚创建的对话框创建一个新的对话框类。把此类命名为 CBlinkDlg,从下拉列表中选择 CBlinkDlg,从对象列表中选择对象 IDC_BUTTON1,从消息列表中选择消息 BN_CLICKED,点击按钮 Add Function 添加新的函数 OnChangeCursorSpeed,在 CBlinkDlg 的方法 OnChangeCursorSpeed 中添加如下代码。

void CBlinkDlg::OnChangeCursorSpeed()

{

switch(cur_setting)

{

case 0:

cur_setting=1;

SetCaretBlinkTime(old_time);

GetDlgItem(IDC_TEXT)->SetWindowText("Speed: Normal");

break;

case 1:

cur_setting=2;

GetDlgItem(IDC_TEXT)->SetWindowText("Speed: Slow");

SetCaretBlinkTime(old_time*2);

break;

case 2:

cur_setting=0;

GetDlgItem(IDC_TEXT)->SetWindowText("Speed: Fast");

SetCaretBlinkTime(old_time/2);

break;

}

}

3.把下面两行添加到类 CBlinkDlg 的构造函数中:

old_time=GetCaretBlinkTime();

cur_setting=0;

4.在此类的头文件中,添加下面暗红色字体的行:

class CBlinkDlg : public CDialog

{

private:

UINT old_time;

int cur_setting;

// Construction

public:

CBlinkDlg(CWnd* pParent = NULL); // standard constructor

~CBlinkDlg();

5.将下面的代码添加到类的源文件 BlinkDlg.cpp 中。

CBlinkDlg::~CBlinkDlg()

{

SetCaretBlinkTime(old_time);

}

6.接着,重新进入 AppStudio。从菜单列表中选择主菜单对象并添加标题为 Dialog 菜单,在此菜单上添加标题为 Change Caret Blink Speed、标识符为 ID_CARET_SPEED 的菜单项,保存此菜单,退出 AppStudio。

7.在 ClassWizard 中,从对象列表中选择对象 ID_CARET_SPEED,从消息列表中选择消息 COMMAND,点击按钮 Add Function 添加新函数 ,在此方法中添加如下代码。

void CMainFrame::OnCaretSpeed()

{

CBlinkDlg dlg;

dlg.DoModal();

}

8.把下面的 include 文件行添加到源文件 MainFrm.cpp 的顶部:

#include "BlinkDlg.h"

9.编译并运行此例子程序。

用法

当用户选择对话框并点击按钮 Change Caret Blink 时,方法 OnChangeCursorSpeed 被调用,此方法检查成员变量 cur_setting 的当前值,并在方法 SetCaretBlinkTime 中设置相应的速度。在对话框的构造函数中,通过对函数 GetCaretBlinkTime 的调用,来获取插入光标闪烁速度的初始值。在例子程序中,将根据此初始设置值,使闪烁的时间或者减半(加快闪烁)或者倍增(减慢闪烁)从而来改变光标的闪烁速度。在对话框的析构函数中,通过方法 SetCaretBlinkTime 将插入光标闪烁速度设置为 Windows 的默认值,以确保对其它应用程序不产生影响。应该注意:整个一次闪烁的时间为所设置时间的两倍,这是因为:这个时间除包括打开光标(光标变亮)所用的时间外,还要包括关闭光标(光标变暗)所用的时间。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有