改變插入光標(biāo)的閃爍速度
發(fā)表時(shí)間:2023-08-19 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]問題 對于大多數(shù)用戶來說,插入光標(biāo)或編輯光標(biāo)閃爍得太塊或太慢都會使他們不易辨別,因此希望能夠允許用戶來定制插入光標(biāo)的閃爍速度,以便他們能夠較容易地閱讀編輯框中的文本并找到它們相應(yīng)的位置。方法 在...
問題
對于大多數(shù)用戶來說,插入光標(biāo)或編輯光標(biāo)閃爍得太塊或太慢都會使他們不易辨別,因此希望能夠允許用戶來定制插入光標(biāo)的閃爍速度,以便他們能夠較容易地閱讀編輯框中的文本并找到它們相應(yīng)的位置。
方法
在 Windows 9x 可定制的領(lǐng)域里,如果用戶想作某種改變而操作系統(tǒng)卻不允許改變,這確實(shí)是件糟透了的事情,Windows 9x 充分考慮了這一特殊問題,并通過對 API 函數(shù) SetCaretBlinkTime 的簡單調(diào)用,解決了這一問題。
函數(shù) SetCaretBlinkTime 顧名思義,用來改變編輯域中光標(biāo)(也就是插入光標(biāo))的閃爍速度。與此相伴的函數(shù) GetCaretBlinkTime 用來返回插入光標(biāo)閃爍速度的當(dāng)前設(shè)置值,當(dāng)利用諸如 SetCaretBlinkTime 這樣的系統(tǒng)函數(shù)時(shí),應(yīng)用程序通常應(yīng)“考慮周到”,即在完成使用某一屬性后,應(yīng)把它恢復(fù)為原來的設(shè)置值。插入光標(biāo)的閃爍速度通常是為 Windows 中的所有應(yīng)用程序設(shè)置的,所以當(dāng)從自己的編輯窗口中移去光標(biāo)時(shí),應(yīng)通過把閃爍速度重新設(shè)置為先前的值或缺省的值,來恢復(fù) Windows 的設(shè)定。
本節(jié)中,將討論如何在應(yīng)用程序中減慢或加快光標(biāo)的閃爍速度。
步驟
按照如下的步驟生成一個(gè)例子程序。選擇主菜單 Dialog 中的菜單項(xiàng) Change Caret Blink Speed,會彈出一個(gè)對話框。點(diǎn)擊按鈕 Change Caret Blink,然后在編輯域中點(diǎn)擊一下,可以看到插入光標(biāo)開始正常閃爍。多次點(diǎn)擊按鈕 Change Caret Blink,每次點(diǎn)擊按鈕后,在編輯域中點(diǎn)擊一下,可以看到插入光標(biāo)的閃爍速度會發(fā)生各種改變,并且在與此按鈕相鄰的文本域中顯示出閃爍速度。
實(shí)現(xiàn)例子程序的步驟如下:
1.在 Visual C++ 中利用 App Wizard 創(chuàng)建新的工程 Ld94。進(jìn)入 App Studio,創(chuàng)建新的對話框,在對話框中,添加標(biāo)題為 Change Caret Blink 的按鈕以及標(biāo)題為 Speed: Normal、ID 為 IDC_TEXT 的文本域。在對話框中再添加一個(gè)編輯域,把按鈕 OK 和 Cancel 移到對話框的底部。
2.進(jìn)入 Class Wizard,為剛創(chuàng)建的對話框創(chuàng)建一個(gè)新的對話框類。把此類命名為 CBlinkDlg,從下拉列表中選擇 CBlinkDlg,從對象列表中選擇對象 IDC_BUTTON1,從消息列表中選擇消息 BN_CLICKED,點(diǎn)擊按鈕 Add Function 添加新的函數(shù) 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 的構(gòu)造函數(shù)中:
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.接著,重新進(jìn)入 AppStudio。從菜單列表中選擇主菜單對象并添加標(biāo)題為 Dialog 菜單,在此菜單上添加標(biāo)題為 Change Caret Blink Speed、標(biāo)識符為 ID_CARET_SPEED 的菜單項(xiàng),保存此菜單,退出 AppStudio。
7.在 ClassWizard 中,從對象列表中選擇對象 ID_CARET_SPEED,從消息列表中選擇消息 COMMAND,點(diǎn)擊按鈕 Add Function 添加新函數(shù) ,在此方法中添加如下代碼。
void CMainFrame::OnCaretSpeed()
{
CBlinkDlg dlg;
dlg.DoModal();
}
8.把下面的 include 文件行添加到源文件 MainFrm.cpp 的頂部:
#include "BlinkDlg.h"
9.編譯并運(yùn)行此例子程序。
用法
當(dāng)用戶選擇對話框并點(diǎn)擊按鈕 Change Caret Blink 時(shí),方法 OnChangeCursorSpeed 被調(diào)用,此方法檢查成員變量 cur_setting 的當(dāng)前值,并在方法 SetCaretBlinkTime 中設(shè)置相應(yīng)的速度。在對話框的構(gòu)造函數(shù)中,通過對函數(shù) GetCaretBlinkTime 的調(diào)用,來獲取插入光標(biāo)閃爍速度的初始值。在例子程序中,將根據(jù)此初始設(shè)置值,使閃爍的時(shí)間或者減半(加快閃爍)或者倍增(減慢閃爍)從而來改變光標(biāo)的閃爍速度。在對話框的析構(gòu)函數(shù)中,通過方法 SetCaretBlinkTime 將插入光標(biāo)閃爍速度設(shè)置為 Windows 的默認(rèn)值,以確保對其它應(yīng)用程序不產(chǎn)生影響。應(yīng)該注意:整個(gè)一次閃爍的時(shí)間為所設(shè)置時(shí)間的兩倍,這是因?yàn)椋哼@個(gè)時(shí)間除包括打開光標(biāo)(光標(biāo)變亮)所用的時(shí)間外,還要包括關(guān)閉光標(biāo)(光標(biāo)變暗)所用的時(shí)間。