




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、阿拉伯軟鍵盤源代碼.h#if !defined(AFX_KEYBOARD_H_8E1FF9C9_0EFD_4403_A860_8E62E6676A68_INCLUDED_)#define AFX_KEYBOARD_H_8E1FF9C9_0EFD_4403_A860_8E62E6676A68_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000/ Keyboard.h : header file/#include Keyboard.h#include AfxTempl.h/ CKeyboard dialogstruct KEYD
2、EFchar cNormal;char cShifted;int cWidth;class CKeyboard : public CDialog/ Constructionpublic:CKeyboard(CWnd* pParent = NULL);/ standard constructorHWNDm_hDlg;int pKeyWidth;int pKeyHeight;CTypedPtrList cKeys;void AddKey(char pNormal,char pShifted,int pWidth);void CalcWidthHeight();void DrawKey(CDC *
3、dc, CRect & rc, KEYDEF * key, BOOL cHilight=FALSE);void SendKey(KEYDEF * key);void ReleaseFocus();int DescribeKeyState();void DrawKeyboard();int cCurrentKeyState;HWND gFocus;BOOL ISShow;POINTPoint ;CDC KEY_pDC;HDC KEY_hdc;HWND KEY_hwnd;CString res_string;CString img_string;CString res_imgstring;CRec
4、t keyRect;BOOL MaybeMove;CPoint OldPoint;RECT allkey;CRect MoveKey;CKeyboard();/ Dialog Data/AFX_DATA(CKeyboard)enum IDD = IDD_ONSCREENKEYBOARD_DIALOG ;/ NOTE: the ClassWizard will add data members here/AFX_DATA/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CKeyboard)prote
5、cted:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV supportvirtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);/AFX_VIRTUAL/ Implementationprotected:/ Generated message map functions/AFX_MSG(CKeyboard)virtual BOOL
6、OnInitDialog();afx_msg void OnPaint();afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnSize(UINT nType, int cx, int cy);afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta,
7、 CPoint pt);afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);afx_msg void OnTimer(UINT nIDEvent);afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);afx_msg void OnMouseMove(UINT nFlags, CPoint point);/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will inser
8、t additional declarations immediately before the previous line.#endif / !defined(AFX_KEYBOARD_H_8E1FF9C9_0EFD_4403_A860_8E62E6676A68_INCLUDED_).cpp#include stdafx.h#include tsylq.h#include Keyboard.h#include PaperPaper.h#include .commonCommon.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic
9、 char THIS_FILE = _FILE_;#endif#define TIMER_ID 101extern HWND hWndold;externCPaper* g_pPaper;/ CKeyboard dialogvoid CKeyboard:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CKeyboard)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(C
10、Keyboard, CDialog)/AFX_MSG_MAP(CKeyboard)ON_WM_PAINT()ON_WM_LBUTTONDBLCLK()ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_SIZE()ON_WM_MOUSEWHEEL()ON_WM_SHOWWINDOW()ON_WM_TIMER()ON_WM_SETCURSOR()ON_WM_MOUSEMOVE()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CKeyboard message handlers#define TAB 0 x02#define CAPSLOCK 0 x
11、03#define SHIFT 0 x04#define CTRL 0 x05#define BSPACE 0 x06#define ENTER 0 x07#define ALT 0 x08#define WINDOW 0 x9#define LEFT 0 x0A#define RIGHT 0 x0B#define UP 0 x0C#define DOWN 0 x0D#define ESC 0 x0E#define PUP 0 x0F#define PDN 0 x10#define HOME 0 x11#define END 0 x12#define INS 0 x13#define DEL
12、0 x14#define WWW 0 x15#define KEYBORADW527#define KEYBORADH236/BOOL CKeyboard:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization herem_hDlg=GetSafeHwnd();/control row/KEY_hwnd = GetSafeHwnd();pKeyWidth = 0;pKeyHeight = 0;ISShow = false;MaybeMove = false;KEY_hdc = :GetDC(m_hDlg);KE
13、Y_pDC.Attach(KEY_hdc);SetWindowPos(NULL,g_pPaper-iWidth-KEYBORADW-8,g_pPaper-iHeigh-KEYBORADH-8, KEYBORADW+8, KEYBORADH+8,SWP_NOZORDER);allkey.left = g_pPaper-iWidth-KEYBORADW-8;allkey.top = g_pPaper-iHeigh-KEYBORADH-8;allkey.right=KEYBORADW+8;allkey.bottom = KEYBORADH+8;/control row/first rowAddKey
14、(0 x00,0 x00,0); /signal row changeAddKey(,35);AddKey(1,!,36);AddKey(2,36);AddKey(3,#,36);AddKey(4,$,36);AddKey(5,%,36);AddKey(6,36);AddKey(7,&,36);AddKey(8,*,36);AddKey(9,(,36);AddKey(0,),36);AddKey(-,_,36);AddKey(=,+,36);AddKey(0 x00,BSPACE,56); /backspace/second rowAddKey(0 x00,0 x00,1); /signal
15、row changeAddKey(0 x00,TAB,56); /tabAddKey(q,Q,36);AddKey(w,W,36);AddKey(e,E,36);AddKey(r,R,36);AddKey(t,T,36);AddKey(y,Y,36);AddKey(u,U,36);AddKey(i,I,36);AddKey(o,O,36);AddKey(p,P,36);AddKey(,36);AddKey(,36);AddKey(,|,36);/third rowAddKey(0 x00,0 x00,2); /signal row changeAddKey(0 x00,CAPSLOCK,66)
16、; /caps lockAddKey(a,A,36);AddKey(s,S,36);AddKey(d,D,36);AddKey(f,F,36);AddKey(g,G,36);AddKey(h,H,36);AddKey(j,J,36);AddKey(k,K,36);AddKey(l,L,36);AddKey(;,:,36);AddKey(,36);AddKey(0 x00,ENTER,62); /enter/fourth rowAddKey(0 x00,0 x00,3); /signal row changeAddKey(0 x00,SHIFT,92); /shiftAddKey(z,Z,36)
17、;AddKey(x,X,36);AddKey(c,C,36);AddKey(v,V,36);AddKey(b,B,36);AddKey(n,N,36);AddKey(m,M,36);AddKey(,36);AddKey(/,?,36);AddKey(0 x00,UP,72);/fifth rowAddKey(0 x00,0 x00,4); /signal row changeAddKey(0 x00,INS,63); /ctrlAddKey(0 x00,UP,17);AddKey(0 x00,DEL,63); /windowAddKey( , ,275);AddKey(0 x00,UP,45)
18、;AddKey(0 x00,ESC,62);CalcWidthHeight();SetTimer(TIMER_ID,250,NULL);return TRUE;/ return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSEvoid CKeyboard:CalcWidthHeight()KEYDEF * key;POSITION pos = cKeys.GetHeadPosition();long totalWidth = 0;long longest =
19、 0;long rows = 0;if(0 != pKeyWidth)&(0 != pKeyHeight)return;while(pos)key = cKeys.GetNext(pos);if(key-cNormal = 0 x00) & (key-cShifted = 0 x00)rows+;if(totalWidth longest)longest = totalWidth;totalWidth = 0;elsetotalWidth += abs(key-cWidth);CRect rect;GetClientRect(rect);pKeyHeight = rect.Height() /
20、 rows;pKeyWidth = (int)(double)rect.Width() / (double)(longest) / 10);void CKeyboard:AddKey(char pNormal,char pShifted,int pWidth)KEYDEF * key = new KEYDEF;key-cNormal = pNormal;key-cShifted = pShifted;key-cWidth = pWidth;cKeys.AddTail(key);void CKeyboard:SendKey(KEYDEF * keydef)if(keydef-cNormal =
21、0 x00)int vk;BOOL uptoo = TRUE;if(keydef-cShifted 0 x6F) /is a function keyvk = keydef-cShifted;elseswitch(keydef-cShifted)case ESC:/vk = VK_ESCAPE;/break;ISShow = false;ShowWindow(SW_HIDE);return;case TAB:/ 0 x02vk = VkKeyScan(0 x09) & 0 xFF;break;case CAPSLOCK:/ 0 x03vk = VK_CAPITAL;break;case SHI
22、FT:/ 0 x04vk = VK_SHIFT;if(GetKeyState(vk) & 0 xF000) return;uptoo = FALSE;break;case CTRL:/ 0 x05vk = VK_CONTROL;if(GetKeyState(vk) & 0 xF000) return;uptoo = FALSE;break;case BSPACE:/ 0 x06vk = VK_BACK;break;case ENTER:/ 0 x07vk = VkKeyScan(0 x0D) & 0 xFF;break;case ALT:/ 0 x08vk = VK_MENU;break;ca
23、se WINDOW:/ 0 x9vk = VK_LWIN;break;case LEFT:/ 0 x0Avk = VK_LEFT;break;case RIGHT:/ 0 x0Bvk = VK_RIGHT;break;case UP:/ 0 x0C/vk = VK_UP;/break;return;case DOWN:/ 0 x0Dvk = VK_DOWN;break;case PUP: /0 x0Fvk = VK_PRIOR;break;case PDN: /0 x10vk = VK_NEXT;break;case HOME: /0 x11vk = VK_HOME;break;case EN
24、D: /0 x12vk = VK_END;break;case INS: /0 x13vk = VK_INSERT;break;case DEL: /0 x14vk = VK_DELETE;break;case WWW:KEYDEF key;key.cNormal = key.cShifted = H;SendKey(&key);key.cNormal = key.cShifted = T;SendKey(&key);SendKey(&key);key.cNormal = key.cShifted = P;SendKey(&key);key.cNormal = key.cShifted = :
25、;SendKey(&key);key.cNormal = key.cShifted = /;SendKey(&key);SendKey(&key);key.cNormal = key.cShifted = W;SendKey(&key);SendKey(&key);SendKey(&key);vk = VkKeyScan(.) & 0 xFF;break;default:ASSERT(FALSE);break;keybd_event(vk,0,0,0);if(uptoo)keybd_event(vk,0,KEYEVENTF_KEYUP,0);elsechar pChar = keydef-cN
26、ormal;SHORT ks = VkKeyScan(pChar);BYTE key = ks & 0 xFF;keybd_event(key,0,0,0);keybd_event(key,0,KEYEVENTF_KEYUP,0);/turn off the control and shift if they were downunsigned char vk = VK_SHIFT;if(GetKeyState(vk) & 0 xF000)keybd_event(vk,0,KEYEVENTF_KEYUP,0);vk = VK_CONTROL;if(GetKeyState(vk) & 0 xF0
27、00) /allow togglekeybd_event(vk,0,KEYEVENTF_KEYUP,0);void CKeyboard:DrawKeyboard()res_imgstring.LoadString(IDS_keypic);img_string = g_pPaper-strMainPath+res_imgstring;SetRect(keyRect,0,0,KEYBORADW,KEYBORADH);SetRect(MoveKey,450,142,523,187);CCommon:DrawJPG(&KEY_pDC,this-keyRect,img_string);MoveWindo
28、w(allkey.left,allkey.top, allkey.right, allkey.bottom ,1);int CKeyboard:DescribeKeyState()int state = 0;short ks;ks = GetKeyState(VK_CAPITAL);if(ks & 0 x000F) state += 0 x01;ks = GetKeyState(VK_SHIFT);if(ks & 0 xF000) state += 0 x02;ks = GetKeyState(VK_CONTROL);if(ks & 0 xF000) state += 0 x04;return
29、 state;void CKeyboard:OnPaint()/CPaintDC dc(this); / device context for painting/ TODO: Add your message handler code here/ Do not call CDialog:OnPaint() for painting messagesif (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);els
30、eCDialog:OnPaint();DrawKeyboard();void CKeyboard:OnLButtonDblClk(UINT nFlags, CPoint point)/ TODO: Add your message handler code here and/or call defaultOnLButtonDown(nFlags, point);/CDialog:OnLButtonDblClk(nFlags, point);void CKeyboard:OnLButtonDown(UINT nFlags, CPoint point)/ TODO: Add your messag
31、e handler code here and/or call defaultif(MaybeMove)MaybeMove=false;point.x = (point.x - allkey.left);point.y = (point.y - allkey.top);OldPoint = point;MaybeMove = true;/CDialog:OnLButtonDown(nFlags, point);void CKeyboard:OnLButtonUp(UINT nFlags, CPoint point)/ TODO: Add your message handler code he
32、re and/or call defaultif(MaybeMove)MaybeMove = false;point.x = (point.x - allkey.left);point.y = (point.y - allkey.top);if(point.x!=OldPoint.x)&(point.y!=OldPoint.y)/移動int offset_x = point.x -OldPoint.x;int offset_y = point.y -OldPoint.y;MoveWindow(allkey.left+offset_x,allkey.top+offset_y, allkey.right, allkey.bottom,1);allkey.left = allkey.left+offset_x;all
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中小學教師試題及答案
- 中外戲劇試題及答案詳解
- 中醫期末試題及答案
- 浙江省杭州市西湖高中2025年生物高二下期末質量檢測模擬試題含解析
- 餐飲行業知識產權保護合同
- 車輛抵押擔保汽車俱樂部會員合同范本
- 環保節能型汽車合伙經營合同書
- 車間租賃合同模板及安全措施
- 宿舍租賃合同(17篇)
- 2025交流工作總結(17篇)
- 《緊固件 鋼制緊固件氫脆基本原理》知識培訓
- DBJ50-T-157-2022房屋建筑和市政基礎設施工程施工現場從業人員配備標準
- 擔保責任轉移協議書(2篇)
- 大學美育知到智慧樹章節測試課后答案2024年秋德州學院
- 企業食品安全知識培訓課件
- 【MOOC】中國近現代史綱要-浙江大學 中國大學慕課MOOC答案
- 2021年中等職業學校學生學業水平考試考務工作細則(考務手冊)
- 中醫體質養生 期末考試試題及答案
- 2024年全國統一高考英語試卷(新課標Ⅰ卷)含答案
- 【課件】第七單元能源的合理利用與開發新版教材單元分析-九年級化學人教版(2024)上冊
- 2024年認證行業法律法規及認證基礎知識 CCAA年度確認 試題與答案
評論
0/150
提交評論