//從cedit派生乙個只允許輸入16進製制資料的新類
//支援輸入 空格 0-f backspace
//在啟用時切換輸入法至英文鍵盤
//在失去焦點時恢復輸入法
//遇非法字元時有警示音提示
#pragma once
// chexeditctrl
class chexeditctrl : public cedit
;
// hexeditctrl.cpp : implementation file
//#include "stdafx.h"
#include "hexeditctrl.h"
#include #pragma comment(lib, "imm32.lib")
// chexeditctrl
implement_dynamic(chexeditctrl, cedit)
chexeditctrl::chexeditctrl()
chexeditctrl::~chexeditctrl()
begin_message_map(chexeditctrl, cedit)
on_control_reflect_ex(en_setfocus, onensetfocu***)
on_control_reflect_ex(en_killfocus, onenkillfocu***)
end_message_map()
// chexeditctrl message handlers
lresult chexeditctrl::windowproc(uint message, wparam wparam, lparam lparam)
; _wcsupr(szinput);
static lpcwstr szvaliditem =l" 0123456789abcdef\b";
if(wcsstr(szvaliditem, szinput) == 0)
wparam = szinput[0];
} if(wm_inputlangchangerequest == message) //切換輸入法訊息
return cedit::windowproc(message, wparam, lparam);
}bool chexeditctrl::onensetfocu***()
return true;
}bool chexeditctrl::onenkillfocu***()
m_bimmgetopenstatus = 0;
} return true;
}
//應用示例
// mfc_1dlg.h : 標頭檔案
//#pragma once
#include "hexeditctrl.h"
// cmfc_dlg 對話方塊
class cmfc_dlg : public cdialog
CEdit只允許十六進製制的資料輸入
網上說的大部分方法是過載cedit,重寫onchar函式,在歷遍進行資料判斷,如果只實現這乙個功能完全不必過載cedit,只需重寫pretranslatemessage函式即可,函式新增方法,選中對話方塊類,右鍵屬性在過載的函式中找。實現方法如下 bool cwindowsrouterdlg pre...
只允許程式執行乙個例項
有兩類方法 第一類 判斷程序是否存在,如果存在則直接退出。第二類 最簡單也是最準確的方法,用命名的互斥物件。如下 m hmutex 可以是成員變數,全域性變數或者是區域性變數 m hmutex createmutex null,false,t not imide if m hmutex 在呼叫 cr...
C 只允許啟動乙個程序
方法一 只禁止多個 程序執行 stathread public static void main else 方法二 禁止多個 程序執行,並當重複執行時啟用以前的 程序 stathread public static void main else public static process runni...