明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

改變插入光標(biāo)的閃爍速度

[摘要]問題  對于大多數(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í)間。