KeyMap.cpp
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:53k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *  KeyMap.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *  MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Processing keys of simulator.
  48.  *  Routine to identify the keys being pressed.
  49.  *
  50.  * Author:
  51.  * -------
  52.  * -------
  53.  * -------
  54.  *
  55.  *============================================================================
  56.  *             HISTORY
  57.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  58.  *------------------------------------------------------------------------------
  59.  * removed!
  60.  *
  61.  * removed!
  62.  * removed!
  63.  * removed!
  64.  *
  65.  * removed!
  66.  * removed!
  67.  * removed!
  68.  *
  69.  * removed!
  70.  * removed!
  71.  * removed!
  72.  *
  73.  *------------------------------------------------------------------------------
  74.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  75.  *============================================================================
  76.  ****************************************************************************/
  77. #ifndef _KEYMAP_CPP
  78. #define _KEYMAP_CPP
  79. #ifdef MMI_ON_WIN32
  80. #include <windows.h>
  81. #include "PixtelDataTypes.h"
  82. #include "KeyMap.h"
  83. #include "StdAfx.h"
  84. #include "GlobalConstants.h"
  85. #include "DebugInitDef.h"
  86. #include "resource.h"
  87. #include "MMI_features.h"
  88. #include "lcd_sw_inc.h"
  89. /***************************************************************************** 
  90. * Define
  91. *****************************************************************************/
  92. /***************************************************************************** 
  93. * Typedef 
  94. *****************************************************************************/
  95. /***************************************************************************** 
  96. * Local Variable
  97. *****************************************************************************/
  98. bool isShutDownSystem = true;
  99. T_W32_SCREEN_DEVICE device;
  100. /***************************************************************************** 
  101. * Local Function
  102. *****************************************************************************/
  103. /***************************************************************************** 
  104. * Global Variable
  105. *****************************************************************************/
  106. extern "C" S16 HEIGHT_OFFSET;
  107. extern "C" S16 WIDTH_OFFSET;
  108. extern "C" S16 Leftsoftkey[]; 
  109. extern "C" S16 Rightsoftkey[];
  110. extern "C" S16 UpArrow[];
  111. extern "C" S16 DownArrow[];
  112. extern "C" S16 LeftArrow[];
  113. extern "C" S16 RightArrow[];
  114. extern "C" S16 KeyMenu[];
  115. extern "C" S16 KeyClear[];
  116. extern "C" S16 KeyCall[];
  117. extern "C" S16 KeyEnd[] ;
  118. extern "C" S16 KeyPowerDown[];
  119. extern "C" S16 VolumeUp[];
  120. extern "C" S16 VolumeDown[];
  121. extern "C" S16 KeyOne[] ;
  122. extern "C" S16 KeyTwo[];
  123. extern "C" S16 KeyThree[];
  124. extern "C" S16 KeyFour[];
  125. extern "C" S16 KeyFive[];
  126. extern "C" S16 KeySix[];
  127. extern "C" S16 KeySeven[];
  128. extern "C" S16 KeyEight[];
  129. extern "C" S16 KeyNine[];
  130. extern "C" S16 KeyZero[];
  131. extern "C" S16 KeyStar[];
  132. extern "C" S16 KeyHash[];
  133. extern "C" S16 KeyEnter[];
  134. extern "C" S16 KeyboardKey[];
  135. extern "C" S16 KeyReserved1[];
  136. extern "C" S16 KeyReserved2[];
  137. extern "C" S16 KeyReserved3[];
  138. extern "C" S16 KeyReserved4[];
  139. extern "C" S16 KeyReserved5[];
  140. extern "C" HWND hWnd;
  141. extern "C" BOOL bFlagNWSimulatorStart;
  142. extern "C" U16 SIMULATOR_SKIN_LCD_X;
  143. extern "C" U16 SIMULATOR_SKIN_LCD_Y;
  144. /***************************************************************************** 
  145. * Global Function
  146. *****************************************************************************/
  147. extern "C" void FeedBackFeelingKeyInit(HWND hWnd, HINSTANCE hInstance, HBITMAP main_hbitmap);
  148. extern "C" void FeedBackFeelingKeyAction(int key_code);
  149. extern "C" void ResetKeyMemory();
  150. extern "C" void ReadKeyProfile(char in_path[], HWND hWnd);
  151. extern "C" T_W32_SCREEN_DEVICE* GetDeviceData();
  152. extern "C" BOOL GetSimulatorBootStatus();
  153. extern "C" HWND GetDialogHandle();
  154. extern "C" HWND GetWindowHandle();
  155. extern "C" void set_global_window_handle(HWND hwnd);
  156. /*****************************************************************************
  157. * FUNCTION
  158. * GetDeviceData
  159. * DESCRIPTION
  160. * Get device data
  161. *
  162. * PARAMETERS
  163. *  nil
  164. * RETURNS
  165. * T_W32_SCREEN_DEVICE *
  166. * GLOBALS AFFECTED
  167. * nil
  168. *****************************************************************************/
  169. extern "C" T_W32_SCREEN_DEVICE* GetDeviceData()
  170. {
  171. /*----------------------------------------------------------------*/
  172.    /* Local Variables                                                */
  173.    /*----------------------------------------------------------------*/
  174. /*----------------------------------------------------------------*/
  175.    /* Code Body                                                      */
  176.    /*----------------------------------------------------------------*/
  177. return &device;
  178. } /* end of GetDeviceDate */
  179. /*****************************************************************************
  180. * FUNCTION
  181. * GetKeyCode
  182. * DESCRIPTION
  183. * Returns the location at which key is pressed
  184. *
  185. * PARAMETERS
  186. *  nil
  187. * RETURNS
  188. * UINT
  189. * GLOBALS AFFECTED
  190. * nil
  191. *****************************************************************************/
  192. UINT GetKeyCode()
  193. {
  194. /*----------------------------------------------------------------*/
  195.    /* Local Variables                                                */
  196.    /*----------------------------------------------------------------*/
  197. UINT  keyCode = KEY_INVALID; 
  198. POINT point;
  199. RECT wnd_rect, clint_rect;
  200. /*----------------------------------------------------------------*/
  201.    /* Code Body                                                      */
  202.    /*----------------------------------------------------------------*/
  203. /* get window info */
  204. /*  Code below to find out the Curser position. */
  205. GetCursorPos(&point);
  206. /*  Code below to find out the co-ordinates of Rectangle. */
  207. GetClientRect(hWnd, &clint_rect);
  208. GetWindowRect(hWnd,&wnd_rect);   /* window coordinates */
  209. HEIGHT_OFFSET = (short)(wnd_rect.bottom-wnd_rect.top-clint_rect.bottom);
  210. WIDTH_OFFSET = (short)(wnd_rect.right-wnd_rect.left-clint_rect.right);
  211. /*  Code below identifies which key is being pressed based upon Cursor position & window coordinates */
  212. if (((point.x - WIDTH_OFFSET > wnd_rect.left + Leftsoftkey[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + Leftsoftkey[2])) &&
  213. ((point.y - HEIGHT_OFFSET > wnd_rect.top + Leftsoftkey[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + Leftsoftkey[3])))
  214. {
  215. keyCode = KEY_LSK;
  216. }
  217. if (((point.x - WIDTH_OFFSET > wnd_rect.left + Rightsoftkey[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + Rightsoftkey[2])) &&
  218. ((point.y - HEIGHT_OFFSET > wnd_rect.top + Rightsoftkey[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + Rightsoftkey[3])))
  219. {
  220. keyCode = KEY_RSK;
  221. }
  222. if (((point.x - WIDTH_OFFSET > wnd_rect.left + UpArrow[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + UpArrow[2])) &&
  223. ((point.y - HEIGHT_OFFSET > wnd_rect.top + UpArrow[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + UpArrow[3])))
  224. {
  225. keyCode = KEY_UP_ARROW;
  226. }
  227. if (((point.x - WIDTH_OFFSET > wnd_rect.left + DownArrow[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + DownArrow[2])) &&
  228. ((point.y - HEIGHT_OFFSET > wnd_rect.top + DownArrow[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + DownArrow[3])))
  229. {
  230. keyCode = KEY_DOWN_ARROW;
  231. }
  232. if (((point.x - WIDTH_OFFSET > wnd_rect.left + LeftArrow[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + LeftArrow[2])) &&
  233. ((point.y - HEIGHT_OFFSET > wnd_rect.top + LeftArrow[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + LeftArrow[3])))
  234. {
  235. keyCode = KEY_LEFT_ARROW;
  236. }
  237. if (((point.x - WIDTH_OFFSET > wnd_rect.left + RightArrow[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + RightArrow[2])) &&
  238. ((point.y - HEIGHT_OFFSET > wnd_rect.top + RightArrow[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + RightArrow[3])))
  239. {
  240. keyCode = KEY_RIGHT_ARROW;
  241. }
  242. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyCall[0] ) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyCall[2])) &&
  243. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyCall[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyCall[3])))
  244. {
  245. keyCode = KEY_SEND;
  246. }
  247. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyEnd[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyEnd[2])) &&
  248. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyEnd[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyEnd[3])))
  249. {
  250. keyCode = KEY_END;
  251. }
  252. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyOne[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyOne[2])) &&
  253. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyOne[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyOne[3])))
  254. {
  255. keyCode = KEY_1;
  256. }
  257. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyTwo[0])  && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyTwo[2])) &&
  258. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyTwo[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyTwo[3])))
  259. {
  260. keyCode = KEY_2;
  261. }
  262. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyThree[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyThree[2])) &&
  263. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyThree[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyThree[3])))
  264. {
  265. keyCode = KEY_3;
  266. }
  267. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyFour[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyFour[2])) &&
  268. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyFour[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyFour[3])))
  269. {
  270. keyCode = KEY_4;
  271. }
  272. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyFive[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyFive[2])) &&
  273. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyFive[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyFive[3])))
  274. {
  275. keyCode = KEY_5;
  276. }
  277. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeySix[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeySix[2])) &&
  278. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeySix[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeySix[3])))
  279. {
  280. keyCode = KEY_6;
  281. }
  282. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeySeven[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeySeven[2])) &&
  283. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeySeven[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeySeven[3])))
  284. {
  285. keyCode = KEY_7;
  286. }
  287. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyEight[0] ) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyEight[2])) &&
  288. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyEight[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyEight[3])))
  289. {
  290. keyCode = KEY_8;
  291. }
  292. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyNine[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyNine[2])) &&
  293. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyNine[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyNine[3])))
  294. {
  295. keyCode = KEY_9;
  296. }
  297. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyZero[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyZero[2])) &&
  298. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyZero[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyZero[3])))
  299. {
  300. keyCode = KEY_0;
  301. }
  302. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyStar[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyStar[2])) &&
  303. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyStar[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyStar[3])))
  304. {
  305. keyCode = KEY_STAR;
  306. }
  307. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyHash[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyHash[2])) &&
  308. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyHash[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyHash[3])))
  309. {
  310. keyCode = KEY_POUND;
  311. }
  312. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyMenu[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyMenu[2])) &&
  313. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyMenu[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyMenu[3])))
  314. {
  315. keyCode = KEY_QUICK_ACS;
  316. }
  317. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyClear[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyClear[2])) &&
  318. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyClear[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyClear[3])))
  319. {
  320. keyCode = KEY_CLEAR;
  321. }
  322. if (((point.x - WIDTH_OFFSET > wnd_rect.left + VolumeUp[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + VolumeUp[2])) &&
  323. ((point.y - HEIGHT_OFFSET > wnd_rect.top + VolumeUp[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + VolumeUp[3])))
  324. {
  325. keyCode = KEY_VOL_UP;
  326. }
  327. if (((point.x - WIDTH_OFFSET > wnd_rect.left + VolumeDown[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + VolumeDown[2])) &&
  328. ((point.y - HEIGHT_OFFSET > wnd_rect.top + VolumeDown[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + VolumeDown[3])))
  329. {
  330. keyCode = KEY_VOL_DOWN;
  331. }
  332. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyEnter[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyEnter[2])) &&
  333. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyEnter[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyEnter[3])))
  334. {
  335. keyCode = KEY_ENTER;
  336. }
  337. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyReserved1[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyReserved1[2])) &&
  338. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyReserved1[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyReserved1[3])))
  339. {
  340. keyCode = KEY_EXTRA_1;
  341. }
  342. if (((point.x - WIDTH_OFFSET > wnd_rect.left + KeyReserved2[0]) && (point.x - WIDTH_OFFSET < wnd_rect.left + KeyReserved2[2])) &&
  343. ((point.y - HEIGHT_OFFSET > wnd_rect.top + KeyReserved2[1]) && (point.y - HEIGHT_OFFSET < wnd_rect.top + KeyReserved2[3])))
  344. {
  345. keyCode = KEY_EXTRA_2;
  346. }
  347. /* PRINT_INFORMATION(("KEY CODE returned from key map = %dn",keyCode));*/
  348. return keyCode;
  349. } /* end of GetKeyCode */
  350. /*****************************************************************************
  351. * FUNCTION
  352. * KillWindowObject
  353. * DESCRIPTION
  354. * Distroy the window
  355. *
  356. * PARAMETERS
  357. *  nil
  358. * RETURNS
  359. * void
  360. * GLOBALS AFFECTED
  361. * nil
  362. *****************************************************************************/
  363. extern "C"{
  364. void KillWindowObject(void)
  365. {
  366. /*----------------------------------------------------------------*/
  367. /* Local Variables                                                */
  368. /*----------------------------------------------------------------*/
  369. /*----------------------------------------------------------------*/
  370. /* Code Body                                                      */
  371. /*----------------------------------------------------------------*/
  372. if(isShutDownSystem == true)
  373. {
  374. isShutDownSystem = false;
  375. PostMessage(hWnd, WM_DESTROY, 0, 0);
  376. }
  377. } /* end of KillWindowObject */
  378. }
  379. /*****************************************************************************
  380. * FUNCTION
  381. * FeedBackFeelingKeyInit
  382. * DESCRIPTION
  383. * initial the feedback feeling keypad
  384. *
  385. * PARAMETERS
  386. *  hWnd IN HWND
  387. * hInstance IN HINSTANCE
  388. * main_hbitmap IN HBITMAP
  389. * RETURNS
  390. * void
  391. * GLOBALS AFFECTED
  392. * nil
  393. *****************************************************************************/
  394. void FeedBackFeelingKeyInit(HWND hWnd, HINSTANCE hInstance, HBITMAP main_hbitmap)
  395. {
  396. /*----------------------------------------------------------------*/
  397.    /* Local Variables                                                */
  398.    /*----------------------------------------------------------------*/
  399. HWND hDlg;
  400. RECT dlg_rect, wnd_rect, clint_rect;
  401. /*----------------------------------------------------------------*/
  402.    /* Code Body                                                      */
  403.    /*----------------------------------------------------------------*/
  404. device.hwnd = hWnd;
  405. hDlg = GetDialogHandle();
  406. GetWindowRect(hWnd, &wnd_rect);
  407. GetWindowRect(hDlg, &dlg_rect);
  408. GetClientRect(hWnd, &clint_rect);
  409. /* reset window size */
  410. SetWindowPos(hWnd, 0, 0, 0, device.window_width, device.window_height+(wnd_rect.bottom-wnd_rect.top-clint_rect.bottom), SWP_NOMOVE | SWP_NOZORDER);
  411. MoveWindow(hDlg, wnd_rect.right, clint_rect.top, dlg_rect.right - dlg_rect.left, wnd_rect.bottom - wnd_rect.top, TRUE);
  412. /* key 1 */
  413. device.key_location[KEY_1].left = KeyOne[0];
  414. device.key_location[KEY_1].top = KeyOne[1];
  415. device.key_location[KEY_1].right = KeyOne[2];
  416. device.key_location[KEY_1].bottom = KeyOne[3];
  417. /* key 2 */
  418. device.key_location[KEY_2].left = KeyTwo[0];
  419. device.key_location[KEY_2].top = KeyTwo[1];
  420. device.key_location[KEY_2].right = KeyTwo[2];
  421. device.key_location[KEY_2].bottom = KeyTwo[3];
  422. /* key 3 */
  423. device.key_location[KEY_3].left = KeyThree[0];
  424. device.key_location[KEY_3].top = KeyThree[1];
  425. device.key_location[KEY_3].right = KeyThree[2];
  426. device.key_location[KEY_3].bottom = KeyThree[3];
  427. /* key 4 */
  428. device.key_location[KEY_4].left = KeyFour[0];
  429. device.key_location[KEY_4].top = KeyFour[1];
  430. device.key_location[KEY_4].right = KeyFour[2];
  431. device.key_location[KEY_4].bottom = KeyFour[3];
  432. /* key 5 */
  433. device.key_location[KEY_5].left = KeyFive[0];
  434. device.key_location[KEY_5].top = KeyFive[1];
  435. device.key_location[KEY_5].right = KeyFive[2];
  436. device.key_location[KEY_5].bottom = KeyFive[3];
  437. /* key 6 */
  438. device.key_location[KEY_6].left = KeySix[0];
  439. device.key_location[KEY_6].top = KeySix[1];
  440. device.key_location[KEY_6].right = KeySix[2];
  441. device.key_location[KEY_6].bottom = KeySix[3];
  442. /* key 7 */
  443. device.key_location[KEY_7].left = KeySeven[0];
  444. device.key_location[KEY_7].top = KeySeven[1];
  445. device.key_location[KEY_7].right = KeySeven[2];
  446. device.key_location[KEY_7].bottom = KeySeven[3];
  447. /* key 8 */
  448. device.key_location[KEY_8].left = KeyEight[0];
  449. device.key_location[KEY_8].top = KeyEight[1];
  450. device.key_location[KEY_8].right = KeyEight[2];
  451. device.key_location[KEY_8].bottom = KeyEight[3];
  452. /* key 9 */
  453. device.key_location[KEY_9].left = KeyNine[0];
  454. device.key_location[KEY_9].top = KeyNine[1];
  455. device.key_location[KEY_9].right = KeyNine[2];
  456. device.key_location[KEY_9].bottom = KeyNine[3];
  457. /* key 0 */
  458. device.key_location[KEY_0].left = KeyZero[0];
  459. device.key_location[KEY_0].top = KeyZero[1];
  460. device.key_location[KEY_0].right = KeyZero[2];
  461. device.key_location[KEY_0].bottom = KeyZero[3];
  462. /* key * */
  463. device.key_location[KEY_STAR].left = KeyStar[0];
  464. device.key_location[KEY_STAR].top = KeyStar[1];
  465. device.key_location[KEY_STAR].right = KeyStar[2];
  466. device.key_location[KEY_STAR].bottom= KeyStar[3];
  467. /* key hash */
  468. device.key_location[KEY_POUND].left = KeyHash[0];
  469. device.key_location[KEY_POUND].top = KeyHash[1];
  470. device.key_location[KEY_POUND].right = KeyHash[2];
  471. device.key_location[KEY_POUND].bottom = KeyHash[3];
  472. /* key soft 1 */
  473. device.key_location[KEY_LSK].left = Leftsoftkey[0];
  474. device.key_location[KEY_LSK].top = Leftsoftkey[1];
  475. device.key_location[KEY_LSK].right = Leftsoftkey[2];
  476. device.key_location[KEY_LSK].bottom = Leftsoftkey[3];
  477. /* key soft 2 */
  478. device.key_location[KEY_RSK].left = Rightsoftkey[0];
  479. device.key_location[KEY_RSK].top = Rightsoftkey[1];
  480. device.key_location[KEY_RSK].right = Rightsoftkey[2];
  481. device.key_location[KEY_RSK].bottom = Rightsoftkey[3];
  482. /* key ok, send */
  483. device.key_location[KEY_SEND].left = KeyCall[0];
  484. device.key_location[KEY_SEND].top = KeyCall[1];
  485. device.key_location[KEY_SEND].right = KeyCall[2];
  486. device.key_location[KEY_SEND].bottom= KeyCall[3];
  487. /* key cancel, end */
  488. device.key_location[KEY_END].left = KeyEnd[0];
  489. device.key_location[KEY_END].top = KeyEnd[1];
  490. device.key_location[KEY_END].right = KeyEnd[2];
  491. device.key_location[KEY_END].bottom = KeyEnd[3];
  492. /* key up */
  493. device.key_location[KEY_UP_ARROW].left = UpArrow[0];
  494. device.key_location[KEY_UP_ARROW].top = UpArrow[1];
  495. device.key_location[KEY_UP_ARROW].right = UpArrow[2];
  496. device.key_location[KEY_UP_ARROW].bottom = UpArrow[3];
  497. /* key down */
  498. device.key_location[KEY_DOWN_ARROW].left = DownArrow[0];
  499. device.key_location[KEY_DOWN_ARROW].top = DownArrow[1];
  500. device.key_location[KEY_DOWN_ARROW].right = DownArrow[2];
  501. device.key_location[KEY_DOWN_ARROW].bottom= DownArrow[3];
  502. /* key left */
  503. device.key_location[KEY_LEFT_ARROW].left = LeftArrow[0];
  504. device.key_location[KEY_LEFT_ARROW].top = LeftArrow[1];
  505. device.key_location[KEY_LEFT_ARROW].right = LeftArrow[2];
  506. device.key_location[KEY_LEFT_ARROW].bottom= LeftArrow[3];
  507. /* key right */
  508. device.key_location[KEY_RIGHT_ARROW].left = RightArrow[0];
  509. device.key_location[KEY_RIGHT_ARROW].top = RightArrow[1];
  510. device.key_location[KEY_RIGHT_ARROW].right = RightArrow[2];
  511. device.key_location[KEY_RIGHT_ARROW].bottom = RightArrow[3];
  512. /* key menu */
  513. device.key_location[KEY_QUICK_ACS].left = KeyMenu[0];
  514. device.key_location[KEY_QUICK_ACS].top = KeyMenu[1];
  515. device.key_location[KEY_QUICK_ACS].right = KeyMenu[2];
  516. device.key_location[KEY_QUICK_ACS].bottom = KeyMenu[3];
  517. /* key func */
  518. device.key_location[KEY_ENTER].left = KeyEnter[0];
  519. device.key_location[KEY_ENTER].top = KeyEnter[1];
  520. device.key_location[KEY_ENTER].right = KeyEnter[2];
  521. device.key_location[KEY_ENTER].bottom = KeyEnter[3];
  522. /* key volume up */
  523. device.key_location[KEY_VOL_UP].left = VolumeUp[0];
  524. device.key_location[KEY_VOL_UP].top = VolumeUp[1];
  525. device.key_location[KEY_VOL_UP].right = VolumeUp[2];
  526. device.key_location[KEY_VOL_UP].bottom = VolumeUp[3];
  527. /* key volume down */
  528. device.key_location[KEY_VOL_DOWN].left = VolumeDown[0];
  529. device.key_location[KEY_VOL_DOWN].top = VolumeDown[1];
  530. device.key_location[KEY_VOL_DOWN].right = VolumeDown[2];
  531. device.key_location[KEY_VOL_DOWN].bottom = VolumeDown[3];
  532. /* key clear */
  533. device.key_location[KEY_CLEAR].left = KeyClear[0];
  534. device.key_location[KEY_CLEAR].top = KeyClear[1];
  535. device.key_location[KEY_CLEAR].right = KeyClear[2];
  536. device.key_location[KEY_CLEAR].bottom = KeyClear[3];
  537. /* key ext1 */
  538. device.key_location[KEY_EXTRA_1].left = KeyReserved1[0];
  539. device.key_location[KEY_EXTRA_1].top = KeyReserved1[1];
  540. device.key_location[KEY_EXTRA_1].right = KeyReserved1[2];
  541. device.key_location[KEY_EXTRA_1].bottom = KeyReserved1[3];
  542. /* key clear */
  543. device.key_location[KEY_EXTRA_2].left = KeyReserved2[0];
  544. device.key_location[KEY_EXTRA_2].top = KeyReserved2[1];
  545. device.key_location[KEY_EXTRA_2].right = KeyReserved2[2];
  546. device.key_location[KEY_EXTRA_2].bottom = KeyReserved2[3];
  547. } /* end of FeedBackFeelingKeyInit */
  548. /*****************************************************************************
  549. * FUNCTION
  550. * FeedBackFeelingKeyAction
  551. * DESCRIPTION
  552. * To draw the feedback feeling button, or recover the original
  553. *
  554. * PARAMETERS
  555. *  key_code IN selected key
  556. * RETURNS
  557. * void
  558. * GLOBALS AFFECTED
  559. * nil
  560. *****************************************************************************/
  561. void FeedBackFeelingKeyAction(int key_code)
  562. {
  563.    /*----------------------------------------------------------------*/
  564.    /* Local Variables                                                */
  565.    /*----------------------------------------------------------------*/
  566. HDC hdc;
  567. HRGN hrgn_lcd;
  568. #ifdef __MMI_SUBLCD__
  569. HRGN hrgn_sublcd;
  570. #endif
  571.    /*----------------------------------------------------------------*/
  572.    /* Code Body                                                      */
  573.    /*----------------------------------------------------------------*/
  574. hdc = GetDC(hWnd);
  575. if (GetSimulatorBootStatus() != FALSE)
  576. {
  577. /* set clipping space for LCD and SUB-LCD */
  578. hrgn_lcd = CreateRectRgn(device.skin_main_lcd_x, device.skin_main_lcd_y, device.skin_main_lcd_x + LCD_WIDTH, device.skin_main_lcd_y + LCD_HEIGHT);
  579. ExtSelectClipRgn(hdc, hrgn_lcd, RGN_DIFF);
  580. #ifdef __MMI_SUBLCD__
  581. hrgn_sublcd = CreateRectRgn(device.skin_sub_lcd_x, device.skin_sub_lcd_y, device.skin_sub_lcd_x + SUBLCD_WIDTH, device.skin_sub_lcd_y + SUBLCD_HEIGHT);
  582. ExtSelectClipRgn(hdc, hrgn_sublcd, RGN_DIFF);
  583. #endif 
  584. }
  585.    if (key_code == KEY_INVALID || key_code == -1)
  586.    {
  587. BitBlt(hdc, 0, 0, device.main_bitmap_width, device.main_bitmap_height, device.main_bitmap, 0, 0, SRCCOPY);
  588.    }
  589.    else if (key_code >= 0)
  590.    {
  591. BitBlt(hdc, device.key_location[key_code].left, device.key_location[key_code].top, device.key_location[key_code].right - device.key_location[key_code].left + 1, device.key_location[key_code].bottom - device.key_location[key_code].top + 1, device.key_bitmap[key_code], 0, 0, SRCCOPY);
  592.    }
  593. #if 0
  594. /* under construction !*/
  595. /* under construction !*/
  596. /* under construction !*/
  597. /* under construction !*/
  598. /* under construction !*/
  599. #endif
  600. DeleteDC(hdc);
  601. } /* end of FeedBackFeelingKeyAction */
  602. /*****************************************************************************
  603. * FUNCTION
  604. * ResetKeyMemory
  605. * DESCRIPTION
  606. * Reset memories for keys
  607. *
  608. * PARAMETERS
  609. *  nil
  610. * RETURNS
  611. * void
  612. * GLOBALS AFFECTED
  613. * nil
  614. *****************************************************************************/
  615. void ResetKeyMemory()
  616. {
  617. /*----------------------------------------------------------------*/
  618.    /* Local Variables                                                */
  619.    /*----------------------------------------------------------------*/
  620. int i;
  621. /*----------------------------------------------------------------*/
  622.    /* Code Body                                                      */
  623.    /*----------------------------------------------------------------*/
  624. device.main_bitmap = NULL;
  625. for (i = 0; i < PC_KEY_NUMBERS; i++)
  626. {
  627. device.key_bitmap[i] = NULL;
  628. }
  629. } /* end of ResetKeyMemory */
  630. /*****************************************************************************
  631. * FUNCTION
  632. * ReadKeyProfile
  633. * DESCRIPTION
  634. * Reading the skin data from INI file
  635. *
  636. * PARAMETERS
  637. *  in_path IN indicates the directory where the INI file resides
  638. * hWnd IN window handle
  639. * RETURNS
  640. * void
  641. * GLOBALS AFFECTED
  642. * nil
  643. *****************************************************************************/
  644. void ReadKeyProfile(char in_path[], HWND hWnd)
  645. {
  646. /*----------------------------------------------------------------*/
  647.    /* Local Variables                                                */
  648.    /*----------------------------------------------------------------*/
  649. char buffer[512], old_path[512], path[512];
  650. int buffer_size = 512;
  651. HBITMAP img;
  652. BITMAP bmp;
  653. HDC hdc;
  654. /*----------------------------------------------------------------*/
  655.    /* Code Body                                                      */
  656.    /*----------------------------------------------------------------*/
  657. set_global_window_handle(hWnd);
  658. /* save the original working directory */
  659. GetCurrentDirectory(512, old_path);
  660. /* get the complete name for opening the INI file */
  661. SetCurrentDirectory(in_path);
  662. strcpy(path, "./Profile.ini");
  663. /* get layout related date */
  664. GetPrivateProfileString("Layout", "WINDOW_WIDTH", NULL, buffer, buffer_size, path);
  665. device.window_width = atoi(buffer);
  666. GetPrivateProfileString("Layout", "WINDOW_HEIGHT", NULL, buffer, buffer_size, path);
  667. device.window_height = atoi(buffer);
  668. GetPrivateProfileString("Layout", "MAIN_LCD_WIDTH", NULL, buffer, buffer_size, path);
  669. device.main_lcd_width = atoi(buffer);
  670. GetPrivateProfileString("Layout", "MAIN_LCD_HEIGHT", NULL, buffer, buffer_size, path);
  671. device.main_lcd_height = atoi(buffer);
  672. GetPrivateProfileString("Layout", "MAIN_LCD_X", NULL, buffer, buffer_size, path);
  673. device.skin_main_lcd_x = atoi(buffer);
  674. GetPrivateProfileString("Layout", "MAIN_LCD_y", NULL, buffer, buffer_size, path);
  675. device.skin_main_lcd_y = atoi(buffer);
  676. GetPrivateProfileString("Layout", "SUB_LCD_WIDTH", NULL, buffer, buffer_size, path);
  677. device.sub_lcd_width = atoi(buffer);
  678. GetPrivateProfileString("Layout", "SUB_LCD_HEIGHT", NULL, buffer, buffer_size, path);
  679. device.sub_lcd_height = atoi(buffer);
  680. GetPrivateProfileString("Layout", "SUB_LCD_X", NULL, buffer, buffer_size, path);
  681. device.skin_sub_lcd_x = atoi(buffer);
  682. GetPrivateProfileString("Layout", "SUB_LCD_y", NULL, buffer, buffer_size, path);
  683. device.skin_sub_lcd_y = atoi(buffer);
  684. /* this should be calculated with window info, not read from INI file */
  685. #if 0
  686. /* under construction !*/
  687. /* under construction !*/
  688. /* under construction !*/
  689. /* under construction !*/
  690. /* under construction !*/
  691. #endif
  692. hdc = GetDC(GetWindowHandle());
  693. /* get coordinates & images */
  694. /* background image */
  695. GetPrivateProfileString("Image", "BACKGROUND", NULL, buffer, buffer_size, path);
  696. if (device.main_bitmap != NULL)
  697. {
  698. DeleteDC(device.main_bitmap);
  699. }
  700. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  701. device.main_bitmap = CreateCompatibleDC(hdc);
  702. SelectObject(device.main_bitmap, img);
  703. GetObject(img, sizeof(BITMAP), &bmp);
  704. device.main_bitmap_width = (U16)bmp.bmWidth;
  705. device.main_bitmap_height = (U16)bmp.bmHeight;
  706. /* key 0 */
  707. GetPrivateProfileString("Coordinate", "KEY_0_LEFT", NULL, buffer, buffer_size, path);
  708. KeyZero[0] = atoi(buffer);
  709. GetPrivateProfileString("Coordinate", "KEY_0_TOP", NULL, buffer, buffer_size, path);
  710. KeyZero[1] = atoi(buffer);
  711. GetPrivateProfileString("Image", "KEY_0", NULL, buffer, buffer_size, path);
  712. if (device.key_bitmap[KEY_0] != NULL)
  713. {
  714. DeleteDC(device.key_bitmap[KEY_0]);
  715. }
  716. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  717. device.key_bitmap[KEY_0] = CreateCompatibleDC(hdc);
  718. SelectObject(device.key_bitmap[KEY_0], img);
  719. GetObject(img, sizeof(BITMAP), &bmp);
  720. KeyZero[2] = KeyZero[0] + bmp.bmWidth - 1;
  721. KeyZero[3] = KeyZero[1] + bmp.bmHeight - 1;
  722. /* key 1 */
  723. GetPrivateProfileString("Coordinate", "KEY_1_LEFT", NULL, buffer, buffer_size, path);
  724. KeyOne[0] = atoi(buffer);
  725. GetPrivateProfileString("Coordinate", "KEY_1_TOP", NULL, buffer, buffer_size, path);
  726. KeyOne[1] = atoi(buffer);
  727. GetPrivateProfileString("Image", "KEY_1", NULL, buffer, buffer_size, path);
  728. if (device.key_bitmap[KEY_1] != NULL)
  729. {
  730. DeleteDC(device.key_bitmap[KEY_1]);
  731. }
  732. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  733. device.key_bitmap[KEY_1] = CreateCompatibleDC(hdc);
  734. SelectObject(device.key_bitmap[KEY_1], img);
  735. GetObject(img, sizeof(BITMAP), &bmp);
  736. KeyOne[2] = KeyOne[0] + bmp.bmWidth - 1;
  737. KeyOne[3] = KeyOne[1] + bmp.bmHeight - 1;
  738. /* key 2 */
  739. GetPrivateProfileString("Coordinate", "KEY_2_LEFT", NULL, buffer, buffer_size, path);
  740. KeyTwo[0] = atoi(buffer);
  741. GetPrivateProfileString("Coordinate", "KEY_2_TOP", NULL, buffer, buffer_size, path);
  742. KeyTwo[1] = atoi(buffer);
  743. GetPrivateProfileString("Image", "KEY_2", NULL, buffer, buffer_size, path);
  744. if (device.key_bitmap[KEY_2] != NULL)
  745. {
  746. DeleteDC(device.key_bitmap[KEY_2]);
  747. }
  748. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  749. device.key_bitmap[KEY_2] = CreateCompatibleDC(hdc);
  750. SelectObject(device.key_bitmap[KEY_2], img);
  751. GetObject(img, sizeof(BITMAP), &bmp);
  752. KeyTwo[2] = KeyTwo[0] + bmp.bmWidth - 1;
  753. KeyTwo[3] = KeyTwo[1] + bmp.bmHeight - 1;
  754. /* key 3 */
  755. GetPrivateProfileString("Coordinate", "KEY_3_LEFT", NULL, buffer, buffer_size, path);
  756. KeyThree[0] = atoi(buffer);
  757. GetPrivateProfileString("Coordinate", "KEY_3_TOP", NULL, buffer, buffer_size, path);
  758. KeyThree[1] = atoi(buffer);
  759. GetPrivateProfileString("Image", "KEY_3", NULL, buffer, buffer_size, path);
  760. if (device.key_bitmap[KEY_3] != NULL)
  761. {
  762. DeleteDC(device.key_bitmap[KEY_3]);
  763. }
  764. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  765. device.key_bitmap[KEY_3] = CreateCompatibleDC(hdc);
  766. SelectObject(device.key_bitmap[KEY_3], img);
  767. GetObject(img, sizeof(BITMAP), &bmp);
  768. KeyThree[2] = KeyThree[0] + bmp.bmWidth - 1;
  769. KeyThree[3] = KeyThree[1] + bmp.bmHeight - 1;
  770. /* key 4 */
  771. GetPrivateProfileString("Coordinate", "KEY_4_LEFT", NULL, buffer, buffer_size, path);
  772. KeyFour[0] = atoi(buffer);
  773. GetPrivateProfileString("Coordinate", "KEY_4_TOP", NULL, buffer, buffer_size, path);
  774. KeyFour[1] = atoi(buffer);
  775. GetPrivateProfileString("Image", "KEY_4", NULL, buffer, buffer_size, path);
  776. if (device.key_bitmap[KEY_4] != NULL)
  777. {
  778. DeleteDC(device.key_bitmap[KEY_4]);
  779. }
  780. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  781. device.key_bitmap[KEY_4] = CreateCompatibleDC(hdc);
  782. SelectObject(device.key_bitmap[KEY_4], img);
  783. GetObject(img, sizeof(BITMAP), &bmp);
  784. KeyFour[2] = KeyFour[0] + bmp.bmWidth - 1;
  785. KeyFour[3] = KeyFour[1] + bmp.bmHeight - 1;
  786. /* key 5 */
  787. GetPrivateProfileString("Coordinate", "KEY_5_LEFT", NULL, buffer, buffer_size, path);
  788. KeyFive[0] = atoi(buffer);
  789. GetPrivateProfileString("Coordinate", "KEY_5_TOP", NULL, buffer, buffer_size, path);
  790. KeyFive[1] = atoi(buffer);
  791. GetPrivateProfileString("Image", "KEY_5", NULL, buffer, buffer_size, path);
  792. if (device.key_bitmap[KEY_5] != NULL)
  793. {
  794. DeleteDC(device.key_bitmap[KEY_5]);
  795. }
  796. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  797. device.key_bitmap[KEY_5] = CreateCompatibleDC(hdc);
  798. SelectObject(device.key_bitmap[KEY_5], img);
  799. GetObject(img, sizeof(BITMAP), &bmp);
  800. KeyFive[2] = KeyFive[0] + bmp.bmWidth - 1;
  801. KeyFive[3] = KeyFive[1] + bmp.bmHeight - 1;
  802. /* key 6 */
  803. GetPrivateProfileString("Coordinate", "KEY_6_LEFT", NULL, buffer, buffer_size, path);
  804. KeySix[0] = atoi(buffer);
  805. GetPrivateProfileString("Coordinate", "KEY_6_TOP", NULL, buffer, buffer_size, path);
  806. KeySix[1] = atoi(buffer);
  807. GetPrivateProfileString("Image", "KEY_6", NULL, buffer, buffer_size, path);
  808. if (device.key_bitmap[KEY_6] != NULL)
  809. {
  810. DeleteDC(device.key_bitmap[KEY_6]);
  811. }
  812. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  813. device.key_bitmap[KEY_6] = CreateCompatibleDC(hdc);
  814. SelectObject(device.key_bitmap[KEY_6], img);
  815. GetObject(img, sizeof(BITMAP), &bmp);
  816. KeySix[2] = KeySix[0] + bmp.bmWidth - 1;
  817. KeySix[3] = KeySix[1] + bmp.bmHeight - 1;
  818. /* key 7 */
  819. GetPrivateProfileString("Coordinate", "KEY_7_LEFT", NULL, buffer, buffer_size, path);
  820. KeySeven[0] = atoi(buffer);
  821. GetPrivateProfileString("Coordinate", "KEY_7_TOP", NULL, buffer, buffer_size, path);
  822. KeySeven[1] = atoi(buffer);
  823. GetPrivateProfileString("Image", "KEY_7", NULL, buffer, buffer_size, path);
  824. if (device.key_bitmap[KEY_7] != NULL)
  825. {
  826. DeleteDC(device.key_bitmap[KEY_7]);
  827. }
  828. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  829. device.key_bitmap[KEY_7] = CreateCompatibleDC(hdc);
  830. SelectObject(device.key_bitmap[KEY_7], img);
  831. GetObject(img, sizeof(BITMAP), &bmp);
  832. KeySeven[2] = KeySeven[0] + bmp.bmWidth - 1;
  833. KeySeven[3] = KeySeven[1] + bmp.bmHeight - 1;
  834. /* key 8 */
  835. GetPrivateProfileString("Coordinate", "KEY_8_LEFT", NULL, buffer, buffer_size, path);
  836. KeyEight[0] = atoi(buffer);
  837. GetPrivateProfileString("Coordinate", "KEY_8_TOP", NULL, buffer, buffer_size, path);
  838. KeyEight[1] = atoi(buffer);
  839. GetPrivateProfileString("Image", "KEY_8", NULL, buffer, buffer_size, path);
  840. if (device.key_bitmap[KEY_8] != NULL)
  841. {
  842. DeleteDC(device.key_bitmap[KEY_8]);
  843. }
  844. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  845. device.key_bitmap[KEY_8] = CreateCompatibleDC(hdc);
  846. SelectObject(device.key_bitmap[KEY_8], img);
  847. GetObject(img, sizeof(BITMAP), &bmp);
  848. KeyEight[2] = KeyEight[0] + bmp.bmWidth - 1;
  849. KeyEight[3] = KeyEight[1] + bmp.bmHeight - 1;
  850. /* key 9 */
  851. GetPrivateProfileString("Coordinate", "KEY_9_LEFT", NULL, buffer, buffer_size, path);
  852. KeyNine[0] = atoi(buffer);
  853. GetPrivateProfileString("Coordinate", "KEY_9_TOP", NULL, buffer, buffer_size, path);
  854. KeyNine[1] = atoi(buffer);
  855. GetPrivateProfileString("Image", "KEY_9", NULL, buffer, buffer_size, path);
  856. if (device.key_bitmap[KEY_9] != NULL)
  857. {
  858. DeleteDC(device.key_bitmap[KEY_9]);
  859. }
  860. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  861. device.key_bitmap[KEY_9] = CreateCompatibleDC(hdc);
  862. SelectObject(device.key_bitmap[KEY_9], img);
  863. GetObject(img, sizeof(BITMAP), &bmp);
  864. KeyNine[2] = KeyNine[0] + bmp.bmWidth - 1;
  865. KeyNine[3] = KeyNine[1] + bmp.bmHeight - 1;
  866. /* LSK */
  867. GetPrivateProfileString("Coordinate", "KEY_LSK_LEFT", NULL, buffer, buffer_size, path);
  868. Leftsoftkey[0] = atoi(buffer);
  869. GetPrivateProfileString("Coordinate", "KEY_LSK_TOP", NULL, buffer, buffer_size, path);
  870. Leftsoftkey[1] = atoi(buffer);
  871. GetPrivateProfileString("Image", "KEY_LSK", NULL, buffer, buffer_size, path);
  872. if (device.key_bitmap[KEY_LSK] != NULL)
  873. {
  874. DeleteDC(device.key_bitmap[KEY_LSK]);
  875. }
  876. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  877. device.key_bitmap[KEY_LSK] = CreateCompatibleDC(hdc);
  878. SelectObject(device.key_bitmap[KEY_LSK], img);
  879. GetObject(img, sizeof(BITMAP), &bmp);
  880. Leftsoftkey[2] = Leftsoftkey[0] + bmp.bmWidth - 1;
  881. Leftsoftkey[3] = Leftsoftkey[1] + bmp.bmHeight - 1;
  882. /* RSK */
  883. GetPrivateProfileString("Coordinate", "KEY_RSK_LEFT", NULL, buffer, buffer_size, path);
  884. Rightsoftkey[0] = atoi(buffer);
  885. GetPrivateProfileString("Coordinate", "KEY_RSK_TOP", NULL, buffer, buffer_size, path);
  886. Rightsoftkey[1] = atoi(buffer);
  887. GetPrivateProfileString("Image", "KEY_RSK", NULL, buffer, buffer_size, path);
  888. if (device.key_bitmap[KEY_RSK] != NULL)
  889. {
  890. DeleteDC(device.key_bitmap[KEY_RSK]);
  891. }
  892. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  893. device.key_bitmap[KEY_RSK] = CreateCompatibleDC(hdc);
  894. SelectObject(device.key_bitmap[KEY_RSK], img);
  895. GetObject(img, sizeof(BITMAP), &bmp);
  896. Rightsoftkey[2] = Rightsoftkey[0] + bmp.bmWidth - 1;
  897. Rightsoftkey[3] = Rightsoftkey[1] + bmp.bmHeight - 1;
  898. /* up arrow key */
  899. GetPrivateProfileString("Coordinate", "KEY_UP_ARROW_LEFT", NULL, buffer, buffer_size, path);
  900. UpArrow[0] = atoi(buffer);
  901. GetPrivateProfileString("Coordinate", "KEY_UP_ARROW_TOP", NULL, buffer, buffer_size, path);
  902. UpArrow[1] = atoi(buffer);
  903. GetPrivateProfileString("Image", "KEY_UP_ARROW", NULL, buffer, buffer_size, path);
  904. if (device.key_bitmap[KEY_UP_ARROW] != NULL)
  905. {
  906. DeleteDC(device.key_bitmap[KEY_UP_ARROW]);
  907. }
  908. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  909. device.key_bitmap[KEY_UP_ARROW] = CreateCompatibleDC(hdc);
  910. SelectObject(device.key_bitmap[KEY_UP_ARROW], img);
  911. GetObject(img, sizeof(BITMAP), &bmp);
  912. UpArrow[2] = UpArrow[0] + bmp.bmWidth - 1;
  913. UpArrow[3] = UpArrow[1] + bmp.bmHeight - 1;
  914. /* down arrow key */
  915. GetPrivateProfileString("Coordinate", "KEY_DOWN_ARROW_LEFT", NULL, buffer, buffer_size, path);
  916. DownArrow[0] = atoi(buffer);
  917. GetPrivateProfileString("Coordinate", "KEY_DOWN_ARROW_TOP", NULL, buffer, buffer_size, path);
  918. DownArrow[1] = atoi(buffer);
  919. GetPrivateProfileString("Image", "KEY_DOWN_ARROW", NULL, buffer, buffer_size, path);
  920. if (device.key_bitmap[KEY_DOWN_ARROW] != NULL)
  921. {
  922. DeleteDC(device.key_bitmap[KEY_DOWN_ARROW]);
  923. }
  924. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  925. device.key_bitmap[KEY_DOWN_ARROW] = CreateCompatibleDC(hdc);
  926. SelectObject(device.key_bitmap[KEY_DOWN_ARROW], img);
  927. GetObject(img, sizeof(BITMAP), &bmp);
  928. DownArrow[2] = DownArrow[0] + bmp.bmWidth - 1;
  929. DownArrow[3] = DownArrow[1] + bmp.bmHeight - 1;
  930. /* left arrow key */
  931. GetPrivateProfileString("Coordinate", "KEY_LEFT_ARROW_LEFT", NULL, buffer, buffer_size, path);
  932. LeftArrow[0] = atoi(buffer);
  933. GetPrivateProfileString("Coordinate", "KEY_LEFT_ARROW_TOP", NULL, buffer, buffer_size, path);
  934. LeftArrow[1] = atoi(buffer);
  935. GetPrivateProfileString("Image", "KEY_LEFT_ARROW", NULL, buffer, buffer_size, path);
  936. if (device.key_bitmap[KEY_LEFT_ARROW] != NULL)
  937. {
  938. DeleteDC(device.key_bitmap[KEY_LEFT_ARROW]);
  939. }
  940. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  941. device.key_bitmap[KEY_LEFT_ARROW] = CreateCompatibleDC(hdc);
  942. SelectObject(device.key_bitmap[KEY_LEFT_ARROW], img);
  943. GetObject(img, sizeof(BITMAP), &bmp);
  944. LeftArrow[2] = LeftArrow[0] + bmp.bmWidth - 1;
  945. LeftArrow[3] = LeftArrow[1] + bmp.bmHeight - 1;
  946. /* righy arrow key */
  947. GetPrivateProfileString("Coordinate", "KEY_RIGHT_ARROW_LEFT", NULL, buffer, buffer_size, path);
  948. RightArrow[0] = atoi(buffer);
  949. GetPrivateProfileString("Coordinate", "KEY_RIGHT_ARROW_TOP", NULL, buffer, buffer_size, path);
  950. RightArrow[1] = atoi(buffer);
  951. GetPrivateProfileString("Image", "KEY_RIGHT_ARROW", NULL, buffer, buffer_size, path);
  952. if (device.key_bitmap[KEY_RIGHT_ARROW] != NULL)
  953. {
  954. DeleteDC(device.key_bitmap[KEY_RIGHT_ARROW]);
  955. }
  956. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  957. device.key_bitmap[KEY_RIGHT_ARROW] = CreateCompatibleDC(hdc);
  958. SelectObject(device.key_bitmap[KEY_RIGHT_ARROW], img);
  959. GetObject(img, sizeof(BITMAP), &bmp);
  960. RightArrow[2] = RightArrow[0] + bmp.bmWidth - 1;
  961. RightArrow[3] = RightArrow[1] + bmp.bmHeight - 1;
  962. /* SEND key */
  963. GetPrivateProfileString("Coordinate", "KEY_SEND_LEFT", NULL, buffer, buffer_size, path);
  964. KeyCall[0] = atoi(buffer);
  965. GetPrivateProfileString("Coordinate", "KEY_SEND_TOP", NULL, buffer, buffer_size, path);
  966. KeyCall[1] = atoi(buffer);
  967. GetPrivateProfileString("Image", "KEY_SEND", NULL, buffer, buffer_size, path);
  968. if (device.key_bitmap[KEY_SEND] != NULL)
  969. {
  970. DeleteDC(device.key_bitmap[KEY_SEND]);
  971. }
  972. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  973. device.key_bitmap[KEY_SEND] = CreateCompatibleDC(hdc);
  974. SelectObject(device.key_bitmap[KEY_SEND], img);
  975. GetObject(img, sizeof(BITMAP), &bmp);
  976. KeyCall[2] = KeyCall[0] + bmp.bmWidth - 1;
  977. KeyCall[3] = KeyCall[1] + bmp.bmHeight - 1;
  978. /* END key */
  979. GetPrivateProfileString("Coordinate", "KEY_END_LEFT", NULL, buffer, buffer_size, path);
  980. KeyEnd[0] = atoi(buffer);
  981. GetPrivateProfileString("Coordinate", "KEY_END_TOP", NULL, buffer, buffer_size, path);
  982. KeyEnd[1] = atoi(buffer);
  983. GetPrivateProfileString("Image", "KEY_END", NULL, buffer, buffer_size, path);
  984. if (device.key_bitmap[KEY_END] != NULL)
  985. {
  986. DeleteDC(device.key_bitmap[KEY_END]);
  987. }
  988. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  989. device.key_bitmap[KEY_END] = CreateCompatibleDC(hdc);
  990. SelectObject(device.key_bitmap[KEY_END], img);
  991. GetObject(img, sizeof(BITMAP), &bmp);
  992. KeyEnd[2] = KeyEnd[0] + bmp.bmWidth - 1;
  993. KeyEnd[3] = KeyEnd[1] + bmp.bmHeight - 1;
  994. /* STAR key */
  995. GetPrivateProfileString("Coordinate", "KEY_STAR_LEFT", NULL, buffer, buffer_size, path);
  996. KeyStar[0] = atoi(buffer);
  997. GetPrivateProfileString("Coordinate", "KEY_STAR_TOP", NULL, buffer, buffer_size, path);
  998. KeyStar[1] = atoi(buffer);
  999. GetPrivateProfileString("Image", "KEY_STAR", NULL, buffer, buffer_size, path);
  1000. if (device.key_bitmap[KEY_STAR] != NULL)
  1001. {
  1002. DeleteDC(device.key_bitmap[KEY_STAR]);
  1003. }
  1004. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1005. device.key_bitmap[KEY_STAR] = CreateCompatibleDC(hdc);
  1006. SelectObject(device.key_bitmap[KEY_STAR], img);
  1007. GetObject(img, sizeof(BITMAP), &bmp);
  1008. KeyStar[2] = KeyStar[0] + bmp.bmWidth - 1;
  1009. KeyStar[3] = KeyStar[1] + bmp.bmHeight - 1;
  1010. /* POUND key */
  1011. GetPrivateProfileString("Coordinate", "KEY_POUND_LEFT", NULL, buffer, buffer_size, path);
  1012. KeyHash[0] = atoi(buffer);
  1013. GetPrivateProfileString("Coordinate", "KEY_POUND_TOP", NULL, buffer, buffer_size, path);
  1014. KeyHash[1] = atoi(buffer);
  1015. GetPrivateProfileString("Image", "KEY_POUND", NULL, buffer, buffer_size, path);
  1016. if (device.key_bitmap[KEY_POUND] != NULL)
  1017. {
  1018. DeleteDC(device.key_bitmap[KEY_POUND]);
  1019. }
  1020. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1021. device.key_bitmap[KEY_POUND] = CreateCompatibleDC(hdc);
  1022. SelectObject(device.key_bitmap[KEY_POUND], img);
  1023. GetObject(img, sizeof(BITMAP), &bmp);
  1024. KeyHash[2] = KeyHash[0] + bmp.bmWidth - 1;
  1025. KeyHash[3] = KeyHash[1] + bmp.bmHeight - 1;
  1026. /* volume-up key */
  1027. GetPrivateProfileString("Coordinate", "KEY_VOL_UP_LEFT", NULL, buffer, buffer_size, path);
  1028. VolumeUp[0] = atoi(buffer);
  1029. GetPrivateProfileString("Coordinate", "KEY_VOL_UP_TOP", NULL, buffer, buffer_size, path);
  1030. VolumeUp[1] = atoi(buffer);
  1031. GetPrivateProfileString("Image", "KEY_VOL_UP", NULL, buffer, buffer_size, path);
  1032. if (device.key_bitmap[KEY_VOL_UP] != NULL)
  1033. {
  1034. DeleteDC(device.key_bitmap[KEY_VOL_UP]);
  1035. }
  1036. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1037. device.key_bitmap[KEY_VOL_UP] = CreateCompatibleDC(hdc);
  1038. SelectObject(device.key_bitmap[KEY_VOL_UP], img);
  1039. GetObject(img, sizeof(BITMAP), &bmp);
  1040. VolumeUp[2] = VolumeUp[0] + bmp.bmWidth - 1;
  1041. VolumeUp[3] = VolumeUp[1] + bmp.bmHeight - 1;
  1042. /* volume-down key */
  1043. GetPrivateProfileString("Coordinate", "KEY_VOL_DOWN_LEFT", NULL, buffer, buffer_size, path);
  1044. VolumeDown[0] = atoi(buffer);
  1045. GetPrivateProfileString("Coordinate", "KEY_VOL_DOWN_TOP", NULL, buffer, buffer_size, path);
  1046. VolumeDown[1] = atoi(buffer);
  1047. GetPrivateProfileString("Image", "KEY_VOL_DOWN", NULL, buffer, buffer_size, path);
  1048. if (device.key_bitmap[KEY_VOL_DOWN] != NULL)
  1049. {
  1050. DeleteDC(device.key_bitmap[KEY_VOL_DOWN]);
  1051. }
  1052. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1053. device.key_bitmap[KEY_VOL_DOWN] = CreateCompatibleDC(hdc);
  1054. SelectObject(device.key_bitmap[KEY_VOL_DOWN], img);
  1055. GetObject(img, sizeof(BITMAP), &bmp);
  1056. VolumeDown[2] = VolumeDown[0] + bmp.bmWidth - 1;
  1057. VolumeDown[3] = VolumeDown[1] + bmp.bmHeight - 1;
  1058. /* KEY_CLEAR */
  1059. GetPrivateProfileString("Coordinate", "KEY_CLEAR_LEFT", NULL, buffer, buffer_size, path);
  1060. KeyClear[0] = atoi(buffer);
  1061. GetPrivateProfileString("Coordinate", "KEY_CLEAR_TOP", NULL, buffer, buffer_size, path);
  1062. KeyClear[1] = atoi(buffer);
  1063. GetPrivateProfileString("Image", "KEY_CLEAR", NULL, buffer, buffer_size, path);
  1064. if (device.key_bitmap[KEY_CLEAR] != NULL)
  1065. {
  1066. DeleteDC(device.key_bitmap[KEY_CLEAR]);
  1067. }
  1068. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1069. device.key_bitmap[KEY_CLEAR] = CreateCompatibleDC(hdc);
  1070. SelectObject(device.key_bitmap[KEY_CLEAR], img);
  1071. GetObject(img, sizeof(BITMAP), &bmp);
  1072. KeyClear[2] = KeyClear[0] + bmp.bmWidth - 1;
  1073. KeyClear[3] = KeyClear[1] + bmp.bmHeight - 1;
  1074. /* KEY_QUICK_ACS */
  1075. GetPrivateProfileString("Coordinate", "KEY_QUICK_ACS_LEFT", NULL, buffer, buffer_size, path);
  1076. KeyMenu[0] = atoi(buffer);
  1077. GetPrivateProfileString("Coordinate", "KEY_QUICK_ACS_TOP", NULL, buffer, buffer_size, path);
  1078. KeyMenu[1] = atoi(buffer);
  1079. GetPrivateProfileString("Image", "KEY_QUICK_ACS", NULL, buffer, buffer_size, path);
  1080. if (device.key_bitmap[KEY_QUICK_ACS] != NULL)
  1081. {
  1082. DeleteDC(device.key_bitmap[KEY_QUICK_ACS]);
  1083. }
  1084. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1085. device.key_bitmap[KEY_QUICK_ACS] = CreateCompatibleDC(hdc);
  1086. SelectObject(device.key_bitmap[KEY_QUICK_ACS], img);
  1087. GetObject(img, sizeof(BITMAP), &bmp);
  1088. KeyMenu[2] = KeyMenu[0] + bmp.bmWidth - 1;
  1089. KeyMenu[3] = KeyMenu[1] + bmp.bmHeight - 1;
  1090. /* KEY_ENTER */
  1091. GetPrivateProfileString("Coordinate", "KEY_ENTER_LEFT", NULL, buffer, buffer_size, path);
  1092. KeyEnter[0] = atoi(buffer);
  1093. GetPrivateProfileString("Coordinate", "KEY_ENTER_TOP", NULL, buffer, buffer_size, path);
  1094. KeyEnter[1] = atoi(buffer);
  1095. GetPrivateProfileString("Image", "KEY_ENTER", NULL, buffer, buffer_size, path);
  1096. if (device.key_bitmap[KEY_ENTER] != NULL)
  1097. {
  1098. DeleteDC(device.key_bitmap[KEY_ENTER]);
  1099. }
  1100. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1101. device.key_bitmap[KEY_ENTER] = CreateCompatibleDC(hdc);
  1102. SelectObject(device.key_bitmap[KEY_ENTER], img);
  1103. GetObject(img, sizeof(BITMAP), &bmp);
  1104. KeyEnter[2] = KeyEnter[0] + bmp.bmWidth - 1;
  1105. KeyEnter[3] = KeyEnter[1] + bmp.bmHeight - 1;
  1106. /* KEY_EXTRA_1 */
  1107. GetPrivateProfileString("Coordinate", "KEY_EXTRA_1_LEFT", NULL, buffer, buffer_size, path);
  1108. KeyReserved1[0] = atoi(buffer);
  1109. GetPrivateProfileString("Coordinate", "KEY_EXTRA_1_TOP", NULL, buffer, buffer_size, path);
  1110. KeyReserved1[1] = atoi(buffer);
  1111. GetPrivateProfileString("Image", "KEY_EXTRA_1", NULL, buffer, buffer_size, path);
  1112. if (device.key_bitmap[KEY_EXTRA_1] != NULL)
  1113. {
  1114. DeleteDC(device.key_bitmap[KEY_EXTRA_1]);
  1115. }
  1116. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1117. device.key_bitmap[KEY_EXTRA_1] = CreateCompatibleDC(hdc);
  1118. SelectObject(device.key_bitmap[KEY_EXTRA_1], img);
  1119. GetObject(img, sizeof(BITMAP), &bmp);
  1120. KeyReserved1[2] = KeyReserved1[0] + bmp.bmWidth - 1;
  1121. KeyReserved1[3] = KeyReserved1[1] + bmp.bmHeight - 1;
  1122. /* KEY_EXTRA_2 */
  1123. GetPrivateProfileString("Coordinate", "KEY_EXTRA_2_LEFT", NULL, buffer, buffer_size, path);
  1124. KeyReserved2[0] = atoi(buffer);
  1125. GetPrivateProfileString("Coordinate", "KEY_EXTRA_2_TOP", NULL, buffer, buffer_size, path);
  1126. KeyReserved2[1] = atoi(buffer);
  1127. GetPrivateProfileString("Image", "KEY_EXTRA_2", NULL, buffer, buffer_size, path);
  1128. if (device.key_bitmap[KEY_EXTRA_2] != NULL)
  1129. {
  1130. DeleteDC(device.key_bitmap[KEY_EXTRA_2]);
  1131. }
  1132. img = (HBITMAP)LoadImage(0, buffer, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
  1133. device.key_bitmap[KEY_EXTRA_2] = CreateCompatibleDC(hdc);
  1134. SelectObject(device.key_bitmap[KEY_EXTRA_2], img);
  1135. GetObject(img, sizeof(BITMAP), &bmp);
  1136. KeyReserved2[2] = KeyReserved2[0] + bmp.bmWidth - 1;
  1137. KeyReserved2[3] = KeyReserved2[1] + bmp.bmHeight - 1;
  1138. FeedBackFeelingKeyInit(hWnd, NULL, NULL);
  1139. FeedBackFeelingKeyAction(-1);
  1140. SendMessage(hWnd, WM_MOVE, 0, 0);
  1141. /* restore the original working directory */
  1142. SetCurrentDirectory(old_path);
  1143. } /* end of ReadKeyProfile */
  1144. #if defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__)
  1145. #include "kal_non_specific_general_types.h"
  1146. #include "lcd_sw_rnd.h" /* LCD width/height */
  1147. extern "C" 
  1148. {
  1149. void mmi_pen_simulator_button_down_hdlr(S16 x, S16 y);
  1150. void mmi_pen_simulator_button_move_hdlr(S16 x, S16 y);
  1151. void mmi_pen_simulator_button_up_hdlr(S16 x, S16 y);
  1152. }
  1153. extern "C" U32 g_simulator_skin_lcd_x;
  1154. extern "C" U32 g_simulator_skin_lcd_y;
  1155. static BOOL g_touch_screen_sim_button_pressed = MMI_FALSE;
  1156. static void TouchScreenSimGetPoint(S16 *x, S16 *y)
  1157. {
  1158. POINT point;
  1159. GetCursorPos(&point);
  1160. ScreenToClient(hWnd, &point);
  1161. *x = (S16) (point.x - SIMULATOR_SKIN_LCD_X);
  1162. *y = (S16) (point.y - SIMULATOR_SKIN_LCD_Y);
  1163. }
  1164. BOOL TouchScreenSimButtonDown(void)
  1165. S16 x, y;
  1166. TouchScreenSimGetPoint(&x, &y);
  1167. if (x >= 0 && x < LCD_WIDTH && y  >= 0 && y < LCD_HEIGHT)
  1168. {
  1169. g_touch_screen_sim_button_pressed = MMI_TRUE;
  1170. mmi_pen_simulator_button_down_hdlr(x, y);
  1171. SetCapture(hWnd);
  1172. return MMI_TRUE;
  1173. }
  1174. else
  1175. {
  1176. return MMI_FALSE;
  1177. }
  1178. }
  1179. BOOL TouchScreenSimButtonMove(void)
  1180. {
  1181. S16 x, y;
  1182. if (g_touch_screen_sim_button_pressed)
  1183. {
  1184. TouchScreenSimGetPoint(&x, &y);
  1185. mmi_pen_simulator_button_move_hdlr(x, y);
  1186. return MMI_TRUE;
  1187. }
  1188. else
  1189. {
  1190. return MMI_FALSE;
  1191. }
  1192. }
  1193. BOOL TouchScreenSimButtonUp(void)
  1194. {
  1195. S16 x, y;
  1196. if (g_touch_screen_sim_button_pressed)
  1197. {
  1198. TouchScreenSimGetPoint(&x, &y);
  1199. mmi_pen_simulator_button_up_hdlr(x, y);
  1200. g_touch_screen_sim_button_pressed = MMI_FALSE;
  1201. ReleaseCapture();
  1202. return MMI_TRUE;
  1203. }
  1204. else
  1205. {
  1206. return MMI_FALSE;
  1207. }
  1208. }
  1209. #endif /* __MMI_TOUCH_SCREEN__ || __MMI_HANDWRITING_PAD__ */
  1210. /* [001] */
  1211. #endif /* MMI_ON_WIN32 */
  1212. #endif /* _KEYMAP_CPP */