DemoGDI.cpp
上传用户:fjqzjn
上传日期:2008-01-21
资源大小:2764k
文件大小:4k
源码类别:

Windows CE

开发平台:

Visual C++

  1. /******************************************************************************
  2. ** Copyright (C) 2004. Intel Corporation. All Rights Reserved. 
  3. **
  4. ** The source code contained or described herein and all documents related to the
  5. ** source code ("Material") are owned by Intel Corporation or its suppliers or 
  6. ** licensors. Title to the Material remains with Intel Corporation or its suppliers
  7. ** and licensors. The Material contains trade secrets and proprietary and 
  8. ** confidential information of Intel or its suppliers and licensors. The Material 
  9. ** is protected by worldwide copyright and trade secret laws and treaty provisions.
  10. ** No part of the Material may be used, copied, reproduced, modified, published, 
  11. ** uploaded, posted, transmitted, distributed, or disclosed in any way without 
  12. ** Intel抯 prior express written permission.
  13. ** 
  14. ** No license under any patent, copyright, trade secret or other intellectual 
  15. ** property right is granted to or conferred upon you by disclosure or delivery 
  16. ** of the Materials, either expressly, by implication, inducement, estoppel or 
  17. ** otherwise. Any license under such intellectual property rights must be express 
  18. ** and approved by Intel in writing.
  19. ******************************************************************************/
  20. // DemoGDI.cpp: implementation of the CDemoGDI class.
  21. //
  22. //////////////////////////////////////////////////////////////////////
  23. #include "stdafx.h"
  24. #include "DispDemo1.h"
  25. #include "DemoGDI.h"
  26. #ifdef _DEBUG
  27. #undef THIS_FILE
  28. static char THIS_FILE[]=__FILE__;
  29. #define new DEBUG_NEW
  30. #endif
  31. //////////////////////////////////////////////////////////////////////
  32. // Construction/Destruction
  33. //////////////////////////////////////////////////////////////////////
  34. CDemoGDI::CDemoGDI(WORD wWidth, WORD wHeight)
  35. {
  36. CString str;
  37. str.Format(L"This screen is %d x %d", wWidth, wHeight);
  38. HDC hdcExternal = m_DisplayConfig.CreateSecondMarathonHDC(wWidth, wHeight);
  39. SetTextColor(hdcExternal, RGB(0x00, 0xA0, 0xFF)); // Kinda Cyan/Blue
  40. SetBkColor(hdcExternal, RGB(0x00, 0x00, 0x00));
  41. SetBkMode(hdcExternal, OPAQUE);
  42. Rectangle(hdcExternal, 0, 0, wWidth, wHeight);
  43. DrawText(hdcExternal, str, str.GetLength(), CRect(0,0,wWidth, wHeight), DT_LEFT|DT_TOP|DT_WORDBREAK);
  44. // now switch to display it
  45. m_DisplayConfig.SetInternalSource(DCFG_SOURCE_XSCALE);
  46. m_DisplayConfig.SetExternalSource(DCFG_SOURCE_MARATHON);
  47. RawFrameBufferInfo* pXScaleFB = m_DisplayConfig.GetXScaleFrameBuffer(); 
  48. TRACE(L"nrDrawing small white close box into system memory that XScale's frame buffer.nr");
  49. for (int y=0; y < pXScaleFB->cyPixels; y++)
  50. {
  51. for (int x=0; x < pXScaleFB->cxPixels; x++)
  52. {
  53. PWORD pPixel = (PWORD)((PBYTE)pXScaleFB->pFramePointer + 
  54. (y * pXScaleFB->cyStride) + 
  55. (x * pXScaleFB->cxStride));
  56. if ((x < 32) && (y < 32))
  57. { // in close box area?
  58. if ((x == 0) || (x == 32-1) || (y == 0) || (y == 32-1) || (x == y) || ((32-1-x) == y))
  59. *pPixel = 0xFFFF;// WHITE
  60. else
  61. *pPixel = 0x0; // BLACK
  62. }
  63. else
  64. *pPixel = 0x001F; // BLUE
  65. }
  66. }
  67. // Create a window to recieve touch screen inputs
  68. m_hWnd = CreateWindow(L"Static", L"MyInputWindow", WS_VISIBLE,
  69.   CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  70.   CW_USEDEFAULT, NULL, NULL, AfxGetInstanceHandle(), NULL);
  71. SHFullScreen(m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON |  SHFS_HIDESTARTICON);
  72. MoveWindow(m_hWnd, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), TRUE);  
  73. SetCapture(m_hWnd);
  74. // now switch to display it
  75. m_DisplayConfig.SetInternalSource(DCFG_SOURCE_XSCALE);
  76. m_DisplayConfig.SetExternalSource(DCFG_SOURCE_MARATHON);
  77. MSG msg;
  78. while (GetMessage(&msg, m_hWnd, WM_MOUSEFIRST, WM_MOUSELAST)) 
  79. {
  80. TranslateMessage(&msg);
  81. DispatchMessage(&msg);
  82. WORD xPos = LOWORD(msg.lParam); 
  83. WORD yPos = HIWORD(msg.lParam);
  84. TRACE(L"nrScreen Tap at %d x %dnr", xPos, yPos);
  85. if ((xPos < 32) && (yPos < 32)) // assuming Carbonado-like rotated display.  Looking for click withing box in XScale buffer
  86. DestroyWindow(m_hWnd);
  87. else
  88. {
  89. FillRect(hdcExternal, CRect(0,0,wWidth, wHeight), (HBRUSH)GetStockObject(BLACK_BRUSH));
  90. str.Format(L"This text starts at (%d,%d) on a %d x %d screen", xPos, yPos, wWidth, wHeight);
  91. DrawText(hdcExternal, str, str.GetLength(), CRect(xPos, yPos, wWidth, wHeight), DT_LEFT|DT_TOP|DT_WORDBREAK);
  92. }
  93. }
  94. SHFullScreen(m_hWnd, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON |  SHFS_SHOWSTARTICON);
  95. }
  96. CDemoGDI::~CDemoGDI()
  97. {
  98. }