锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#pragma once
//瀛楁瘝鏍囩闆嗗悎
class LabelSet
{
public:
LabelSet(LPCSTR* _pTable,int _n);
LPCSTR getLabel(int _id) const;
~LabelSet();
protected:
LabelSet(){}
private:
LPCSTR* pTable;
int n;
};
//鐩稿綋浜庡崟鍒鍙屾幏寮鍏崇粍
class LabelSetEx
{
protected:
struct Switch
{
LabelSet* s[2];
int at;
};
public:
LabelSetEx(int _n);
bool addSets(int id,LPCSTR* s1,LPCSTR* s2,int n,int at = 0);
LPCSTR getLable(int id,int off) const;
void turn(int id);
~LabelSetEx();
private:
int n; //寮鍏崇粍鎬諱釜鏁?/span>
Switch* pGroup; //寮鍏崇粍
};
//
//LabelSet.cpp
#include "StdAfx.h"
#include "LabelSet.h"
#include <algorithm>
#include <cassert>
using namespace std;
LabelSet::LabelSet( LPCSTR* _pTable,int _n )
{
n = _n;
pTable = new LPCSTR[n];
copy(_pTable,_pTable + _n,pTable);
}
LPCSTR LabelSet::getLabel( int _id ) const
{
return pTable[_id];
}
LabelSet::~LabelSet()
{
delete [] pTable;
}
LabelSetEx::LabelSetEx( int _n )
{
n = _n;
pGroup = new Switch[n];
memset(pGroup,0,n * sizeof(pGroup[0]));
}
LabelSetEx::~LabelSetEx()
{
while(n--)
{
if(pGroup[n].s[0] == pGroup[n].s[1])
delete pGroup[n].s[0];
else
{
delete pGroup[n].s[0];
delete pGroup[n].s[1];
}
}
delete [] pGroup;
}
bool LabelSetEx::addSets( int id,LPCSTR* s1,LPCSTR* s2,int n,int at /*= 0*/ )
{
assert((at & ~1) == 0);
if(pGroup[id].s[0] != NULL)
return false;
LabelSet* p = new LabelSet(s1,n);
pGroup[id].s[0] = p;
if(s1 == s2)
pGroup[id].s[1] = p;
else
pGroup[id].s[1] = new LabelSet(s2,n);
pGroup[id].at = at;
return true;
}
LPCSTR LabelSetEx::getLable( int id,int off ) const
{
Switch* p = pGroup + id;
return p->s[p->at]->getLabel(off);
}
void LabelSetEx::turn( int id )
{
assert((pGroup->at & ~1) == 0);
pGroup[id].at ^= 1;
}
//鍒嗙被id鐨勫畾涔?/span>
#define LABEL_SET_ALPHA 0
#define LABEL_SET_SYMBOL 1
#define LABEL_SET_NUMPAD 2
#define LABEL_SET_MAIN 3
#define LABEL_SET_HELP 4
//瀛楁瘝涓茶〃
extern LPCSTR AlphaTable1[]; //灝忓啓
extern LPCSTR AlphaTable2[]; //澶у啓
extern const int AlphaTableSize;
//絎﹀彿涓茶〃
extern LPCSTR SymbolTable1[]; //涓?/span>
extern LPCSTR SymbolTable2[]; //涓?/span>
extern const int SymbolTableSize;
//灝忛敭鐩樻暟瀛楄〃
extern LPCSTR NumPadTable1[]; //鏁板瓧
extern LPCSTR NumPadTable2[]; //鍏夋爣鎺у埗
extern const int NumPadTableSize;
//涓婚敭鐩樺崟鏄?/span>
extern LPCSTR MainTable[];
extern const int MainTableSize;
//杈呭姪閿洏鍗曟樉
extern LPCSTR HelpTable[];
extern const int HelpTableSize;
struct KeyConfig
{
short id; //鍒嗙被id
short offset; //綾誨唴鍋忕Щ
RECT rt; //浣嶇疆
BYTE vk; //铏氭嫙鐮?/span>
};
extern KeyConfig kcs[];
extern const int kcSize;
extern const SIZE kbSize;
鏂規浜岋細鍏跺疄鏈夋洿綆渚跨殑鏂規硶銆傝緗富紿楀彛灞炴т負WM_ES_NOACTIVATE錛岃繖鏍風獥鍙e氨涓嶄細鎴愪負鍓嶅彴紿楀彛錛屼笉綆″浣曞彂閫侀敭鐩樻秷鎭紝鎷ユ湁鐒︾偣鐨勭獥鍙f諱細鏀跺埌銆備絾姝ゆ椂浠嶇劧瀛樺湪闂銆傚綋縐誨姩紿楀彛鏃訛紝鏁堟灉涓嶅ぇ欏虹晠錛岃屼笖娌″姙娉曞搷搴旇彍鍗曞懡浠わ紝閭f槸鍥犱負璇ョ獥鍙e緇堜笉鏄墠鍙扮獥鍙i犳垚鐨勩傝В鍐蟲柟娉曞氨鏄湪鍗曞嚮鏍囬鏍忔椂錛屾垚涓哄墠鍙扮獥鍙o紝閲婃斁鏄綊榪樺墠鍙般?br>
{
if(m_hForground == NULL)
{
m_hForground = ::GetForegroundWindow();
ModifyStyleEx(WS_EX_NOACTIVATE,0);
SetForegroundWindow();
}
CFrameWnd::OnNcLButtonDown(nHitTest, point);
}
{
if(m_hForground != NULL)
{
::SetForegroundWindow(m_hForground);
ModifyStyleEx(0,WS_EX_NOACTIVATE);
m_hForground = NULL;
}
CFrameWnd::OnNcMouseMove(nHitTest, point);
}
榪欏彧鏄涓涓増鏈紝榪樻湁寰堝闂闇瑕佽В鍐熾?br> 寰呰В鍐抽棶棰樹竴錛歺ml閰嶇疆鍔ㄦ侀厤緗敭鐩橈紝鍙婂姩鎬佹洿鎹㈡樉紺烘晥鏋溿?br> 寰呰В鍐抽棶棰樹簩錛氬悓姝ョ墿鐞嗛敭鐩樸?br> 寰呰В鍐抽棶棰樹笁錛氭洿娣卞眰嬈★紝闃叉閿洏娑堟伅琚玥ook錛屽垵姝ヨ璇嗭紝浼間箮鍙互浣跨敤鍓創鏉褲?br> 銆愭簮浠g爜1.2鐗堟湰錛?a href="http://www.shnenglu.com/Files/yefeng/VirtualKeyboard1.2.rar">http://www.shnenglu.com/Files/yefeng/VirtualKeyboard1.2.rar銆?/span>
]]>