改變插入光標的閃爍速度
發表時間:2023-08-19 來源:明輝站整理相關軟件相關文章人氣:
[摘要]問題 對于大多數用戶來說,插入光標或編輯光標閃爍得太塊或太慢都會使他們不易辨別,因此希望能夠允許用戶來定制插入光標的閃爍速度,以便他們能夠較容易地閱讀編輯框中的文本并找到它們相應的位置。方法 在...
問題
對于大多數用戶來說,插入光標或編輯光標閃爍得太塊或太慢都會使他們不易辨別,因此希望能夠允許用戶來定制插入光標的閃爍速度,以便他們能夠較容易地閱讀編輯框中的文本并找到它們相應的位置。
方法
在 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 的默認值,以確保對其它應用程序不產生影響。應該注意:整個一次閃爍的時間為所設置時間的兩倍,這是因為:這個時間除包括打開光標(光標變亮)所用的時間外,還要包括關閉光標(光標變暗)所用的時間。