www.pudn.com > WBDraw.rar > MyWnd.cpp
// MyWnd.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include#include "MyWnd.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // MyWnd struct TOOLBARCMD{ int icmd;int idx;char m_str[10];int m_icon;char strText[20]; }; TOOLBARCMD g_Dcmd[]= { {ID_LINE1,0,"LE",IDC_LINE,"直线"}, {ID_PEN,1,"PN",IDC_PAINT,"画笔"}, {ID_ELLPLE,2,"EL",IDC_ELLPLE,"画圆"}, {ID_ELLFILL,3,"EF",IDC_ELLFILL,"填充圆"}, {ID_RECT,4,"RT",IDC_RECT,"画框"}, {ID_RECTFILL,5,"RF",IDC_RECTFILL,"填充框"}, {ID_TEXT1,6,"TE",IDC_TEXT1,"文字"}, {ID_ERASE,7,"ER",IDC_ERASE,"橡皮擦"}, {ID_COPYSCRN,8,"CS",IDC_COPYSCRN,"截屏"}, {ID_SAVEWB,9,"SW",0,"保存"}, {ID_COLOR,10,"CR",0,"颜色"}, }; MyWnd::MyWnd() { m_bRun = FALSE; m_hPen = CreatePen(PS_SOLID, 1, 0); m_hBrush=CreateHatchBrush(HS_BDIAGONAL,0); } MyWnd::~MyWnd() { if(m_hPen){ DeleteObject(m_hPen); } if(m_hBrush){ DeleteObject(m_hBrush); } } BEGIN_MESSAGE_MAP(MyWnd, CWnd) //{{AFX_MSG_MAP(MyWnd) ON_WM_MOUSEMOVE() ON_WM_PAINT() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_COMMAND(ID_LINE, OnLine) ON_WM_CREATE() ON_COMMAND(ID_HAND, OnHand) ON_WM_SIZE() ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify ) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // MyWnd message handlers BOOL MyWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { HDC hdc; hdc = ::GetDC(pParentWnd->m_hWnd); m_hMemDC = ::CreateCompatibleDC(hdc); ::GetClientRect(pParentWnd->m_hWnd, &m_ClientRect); m_ClientRect.right =1024; m_ClientRect.bottom =768; m_ClientRect.left =0; m_ClientRect.top =0; bFlag = FALSE; m_PenWidth = 0; m_nIconMode = IDC_PAINT; m_nMouseMode = ID_PEN; m_bSelecting= FALSE; m_mycolor = RGB(0, 0, 0); m_PenWidth = 0; m_bShowEdit= false; g_pCallBackInterface =NULL; m_hBitmap = ::CreateCompatibleBitmap(hdc, m_ClientRect.right-m_ClientRect.left, m_ClientRect.bottom-m_ClientRect.top); ::ReleaseDC(pParentWnd->m_hWnd, hdc); ::SelectObject(m_hMemDC, m_hBitmap); ::FillRect(m_hMemDC, &m_ClientRect, HBRUSH(RGB(0xFF,0xFF,0xFF))); BOOL bRetCode=CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);//CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext); CRect m_CRect(rect.left-10,rect.top,rect.right,rect.bottom); MoveWindow(m_CRect,true); return bRetCode; } void MyWnd::RegCallBackFun(WBCallBackInterface *pCallBack) { g_pCallBackInterface = pCallBack; } void MyWnd::OnPaint() { HDC hdc; BITMAP bm; PAINTSTRUCT ps; ::SelectObject(m_hMemDC, m_hBitmap); hdc = ::BeginPaint(m_hWnd, &ps); ::GetObject(m_hBitmap, sizeof(bm), &bm); ::BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,m_hMemDC,0,0,SRCCOPY); ::EndPaint(m_hWnd, &ps); } void MyWnd::OnMouseMove(UINT nFlags, CPoint point) { HPEN oldpen; HBRUSH oldhBrush; SetCursor(AfxGetApp()->LoadCursor(m_nIconMode)); if(m_bSelecting&&(nFlags == MK_LBUTTON)){ switch(m_nMouseMode){ case ID_LINE1: { m_nIconMode = IDC_LINE; oldpen = (HPEN)SelectObject(m_hMemDC,m_hPen); SelectObject(m_hMemDC,m_hPen); SetROP2(m_hMemDC,R2_NOTXORPEN); MoveToEx(m_hMemDC,m_StartPoint.x, m_StartPoint.y,NULL); LineTo(m_hMemDC,m_oldpoint.x, m_oldpoint.y); m_oldpoint.x=point.x; m_oldpoint.y=point.y; MoveToEx(m_hMemDC,m_StartPoint.x, m_StartPoint.y,NULL); LineTo(m_hMemDC,m_oldpoint.x, m_oldpoint.y); SelectObject(m_hMemDC,oldpen); } break; case ID_PEN: { oldpen = (HPEN)SelectObject(m_hMemDC,m_hPen); SelectObject(m_hMemDC,m_hPen); MoveToEx(m_hMemDC,m_oldpoint.x, m_oldpoint.y,NULL); LineTo(m_hMemDC,point.x, point.y); m_oldpoint.x=point.x; m_oldpoint.y=point.y; if(m_wrtPacket.getSize()>6000){ m_wrtPacket<<(uint32)point.x; m_wrtPacket<<(uint32)point.y; if(g_pCallBackInterface){ g_pCallBackInterface->callbackSendMsg((unsigned char *)m_wrtPacket.getData() , m_wrtPacket.getSize() ) ; } m_wrtPacket.Reset(); m_wrtPacket<<(uint32)m_nMouseMode; m_wrtPacket<<(uint32)point.x; m_wrtPacket<<(uint32)point.y; m_wrtPacket<<(uint32)m_mycolor; m_wrtPacket<<(uint32)m_PenWidth; } else { m_wrtPacket<<(uint32)point.x; m_wrtPacket<<(uint32)point.y; } SelectObject(m_hMemDC,oldpen); } break; case ID_ELLPLE: { oldpen = (HPEN)SelectObject(m_hMemDC,m_hPen); SelectObject(m_hMemDC,m_hPen); SetROP2(m_hMemDC,R2_NOTXORPEN); Ellipse(m_hMemDC,m_StartPoint.x, m_StartPoint.y,m_oldpoint.x, m_oldpoint.y); m_oldpoint.x=point.x; m_oldpoint.y=point.y; Ellipse(m_hMemDC,m_StartPoint.x, m_StartPoint.y,m_oldpoint.x, m_oldpoint.y); SelectObject(m_hMemDC,oldpen); } break; case ID_TEXT1: case ID_ERASE: { HPEN pen1=CreatePen(PS_DOT, 1, RGB(0,0,0)); oldpen = (HPEN)SelectObject(m_hMemDC,pen1); SelectObject(m_hMemDC,pen1); SetROP2(m_hMemDC,R2_NOTXORPEN); Rectangle(m_hMemDC,m_StartPoint.x, m_StartPoint.y,m_oldpoint.x, m_oldpoint.y); m_oldpoint.x=point.x; m_oldpoint.y=point.y; Rectangle(m_hMemDC,m_StartPoint.x, m_StartPoint.y,m_oldpoint.x, m_oldpoint.y); SelectObject(m_hMemDC,oldpen); DeleteObject(pen1); } break; case ID_RECT: { oldpen = (HPEN)SelectObject(m_hMemDC,m_hPen); SelectObject(m_hMemDC,m_hPen); SetROP2(m_hMemDC,R2_NOTXORPEN); Rectangle(m_hMemDC,m_StartPoint.x, m_StartPoint.y,m_oldpoint.x, m_oldpoint.y); m_oldpoint.x=point.x; m_oldpoint.y=point.y; Rectangle(m_hMemDC,m_StartPoint.x, m_StartPoint.y,m_oldpoint.x, m_oldpoint.y); SelectObject(m_hMemDC,oldpen); } break; case ID_RECTFILL: { oldhBrush=CreateHatchBrush(WHITE_BRUSH,RGB(255,255,255)); SelectObject(m_hMemDC,m_hBrush); SetROP2(m_hMemDC,R2_NOTXORPEN); Rectangle(m_hMemDC,m_StartPoint.x,m_StartPoint.y,m_oldpoint.x,m_oldpoint.y); m_oldpoint.x=point.x; m_oldpoint.y=point.y; Rectangle(m_hMemDC,m_StartPoint.x,m_StartPoint.y,m_oldpoint.x,m_oldpoint.y); SelectObject(m_hMemDC,oldhBrush); } break; case ID_ELLFILL: { oldhBrush=CreateHatchBrush(WHITE_BRUSH,RGB(255,255,255)); SelectObject(m_hMemDC,m_hBrush); SetROP2(m_hMemDC,R2_NOTXORPEN); Ellipse(m_hMemDC,m_StartPoint.x,m_StartPoint.y,m_oldpoint.x,m_oldpoint.y); m_oldpoint.x=point.x; m_oldpoint.y=point.y; Ellipse(m_hMemDC,m_StartPoint.x,m_StartPoint.y,m_oldpoint.x,m_oldpoint.y); SelectObject(m_hMemDC,oldhBrush); } break; } RECT rect; GetWindowRect(&rect); ScreenToClient(&rect); rect.top=rect.top+35; InvalidateRect(&rect); //Invalidate(FALSE); } CWnd::OnMouseMove(nFlags, point); } void MyWnd::OnLButtonDown(UINT nFlags, CPoint point) { SetCursor(AfxGetApp()->LoadCursor(m_nIconMode)); m_StartPoint=m_oldpoint = point; if(m_nMouseMode == ID_TEXT1 && !m_bRun){ m_DEdit.Create(CRect(0,0,0,0),this,1); m_bRun=true; } m_hPen = CreatePen(PS_SOLID, m_PenWidth, m_mycolor); m_hBrush=CreateHatchBrush(HS_BDIAGONAL,m_mycolor); SetCapture(); m_bSelecting=TRUE; m_wrtPacket.Reset(); m_wrtPacket<<(uint32)m_nMouseMode; m_wrtPacket<<(uint32)point.x; m_wrtPacket<<(uint32)point.y; m_wrtPacket<<(uint32)m_mycolor; m_wrtPacket<<(uint32)m_PenWidth; CWnd::OnLButtonDown(nFlags, point); } void MyWnd::OnLButtonUp(UINT nFlags, CPoint point) { SetCursor(AfxGetApp()->LoadCursor(m_nIconMode)); switch(m_nMouseMode) { case ID_TEXT1: { if(m_bShowEdit){ ::SendMessage(m_hWnd,ID_SETTEXT,0,0); } m_DEdit.MoveWindow(CRect(m_StartPoint,point)); m_DEdit.SetWindowText(""); m_DEdit.ShowWindow(SW_SHOW); m_DEdit.SetFocus(); HPEN pen=CreatePen(PS_DOT, 1, RGB(0,0,0)); HPEN oldpen = (HPEN)SelectObject(m_hMemDC,pen); SelectObject(m_hMemDC,pen); SetROP2(m_hMemDC,R2_NOTXORPEN); Rectangle(m_hMemDC,m_StartPoint.x, m_StartPoint.y,m_oldpoint.x, m_oldpoint.y); SelectObject(m_hMemDC,oldpen); DeleteObject(pen); m_bShowEdit=TRUE; } break; case ID_ERASE: { HPEN pen=CreatePen(PS_DOT, 1, RGB(0,0,0)); HPEN oldpen = (HPEN)SelectObject(m_hMemDC,pen); SelectObject(m_hMemDC,pen); SetROP2(m_hMemDC,R2_NOTXORPEN); Rectangle(m_hMemDC,m_StartPoint.x, m_StartPoint.y,m_oldpoint.x, m_oldpoint.y); SelectObject(m_hMemDC,oldpen); DeleteObject(pen); CRect m_pRect(m_StartPoint,m_oldpoint); ::FillRect(m_hMemDC,&m_pRect, HBRUSH(RGB(0xFF,0xFF,0xFF))); m_wrtPacket<<(uint32)point.x; m_wrtPacket<<(uint32)point.y; if(g_pCallBackInterface){ g_pCallBackInterface->callbackSendMsg((unsigned char *)m_wrtPacket.getData() , m_wrtPacket.getSize() ) ; } Invalidate(FALSE); } break; default: m_wrtPacket<<(uint32)point.x; m_wrtPacket<<(uint32)point.y; if(g_pCallBackInterface){ g_pCallBackInterface->callbackSendMsg((unsigned char *)m_wrtPacket.getData() , m_wrtPacket.getSize() ) ; } break; } if(m_hPen){ DeleteObject(m_hPen); } if(m_hBrush){ DeleteObject(m_hBrush); } ReleaseCapture(); m_bSelecting=FALSE; CWnd::OnLButtonUp(nFlags, point); } void MyWnd::OnLine() { } LRESULT MyWnd::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message==ID_SETTEXT){ if(m_bShowEdit){ CString cs; m_DEdit.GetWindowText(cs); m_bShowEdit=false; m_DEdit.ShowWindow(SW_HIDE); if(!cs.IsEmpty()){ CDC * pdc=GetDC(); CRect rt; pdc->SetROP2(R2_WHITE); m_DEdit.GetWindowRect(rt); ScreenToClient(rt); ValidateRect(rt); ::TextOut(m_hMemDC,rt.left,rt.top,cs,strlen(cs)); ReleaseDC(pdc); m_wrtPacket.Reset(); m_wrtPacket<<(uint32)m_nMouseMode; m_wrtPacket<<(uint32)rt.left<<(uint32)rt.top< callbackSendMsg((unsigned char *)m_wrtPacket.getData() , m_wrtPacket.getSize() ) ; } InvalidateRect(rt,true); } } } return CWnd::DefWindowProc(message, wParam, lParam); } BOOL MyWnd::DestroyWindow() { return CWnd::DestroyWindow(); } BOOL MyWnd::OnCommand(WPARAM wParam, LPARAM lParam) { for(int i=0;i<11;i++){ if(g_Dcmd[i].icmd==wParam ){ if(m_bShowEdit&& wParam!=ID_TEXT1){ ::SendMessage(m_hWnd,ID_SETTEXT,0,0); } switch(wParam) { case ID_COLOR: { CColorDialog dlg; if(IDOK==dlg.DoModal()) { m_mycolor=dlg.GetColor(); DeleteObject(m_hPen); m_hPen = CreatePen(PS_SOLID, 1, m_colors); } } break; case ID_SAVEWB: { SaveWB(); } break; default: m_nMouseMode = wParam; m_nIconMode = g_Dcmd[i].m_icon; } break; } } return CWnd::OnCommand(wParam, lParam); } int MyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; int m_bitmapsize=32; int image=0; int bid=ID_ARROW; COLORREF mask=RGB(0,255,255); m_BtList.Create(g_Dcmd[3].icmd,m_bitmapsize,m_bitmapsize,mask); if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1)) { TRACE0("Failed to create toolbar\n"); return -1; } m_wndToolBar.ShowWindow(SW_SHOW); RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //设置ToolBar的图标列表 m_ilTB.Create(24,24, TRUE | ILC_COLOR8, 8, 0); HICON hIcon = NULL; m_BtList.Create(24,24,ILC_COLOR32| ILC_MASK ,0,32); CToolBarCtrl& bar = m_wndToolBar.GetToolBarCtrl(); for(int i=0;i<11;i++){ m_BtList.Add(AfxGetApp()->LoadIcon(g_Dcmd[i].icmd)); } bar.SetImageList(&m_BtList); return 0; } BOOL MyWnd::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; return CWnd::PreCreateWindow(cs); } void MyWnd::SaveWB() { CClientDC dc(this); CDC memDC; CRect rect; GetClientRect(rect); memDC.CreateCompatibleDC(&dc); CBitmap bm; int Width = rect.Width(); int Height = rect.Height(); bm.CreateCompatibleBitmap(&dc, Width, Height); CBitmap* pOld = memDC.SelectObject(&bm); memDC.BitBlt(0, 0, Width, Height, &dc, 0, 0, SRCCOPY); memDC.SelectObject(pOld); BITMAP btm; bm.GetBitmap(&btm); DWORD size = btm.bmWidthBytes * btm.bmHeight; LPSTR lpData = (LPSTR)GlobalAllocPtr(GPTR, size); BITMAPFILEHEADER bfh; BITMAPINFOHEADER bih; bih.biBitCount = btm.bmBitsPixel; bih.biClrImportant = 0; bih.biClrUsed = 0; bih.biCompression = 0; bih.biHeight = btm.bmHeight; bih.biPlanes = 1; bih.biSize = sizeof(BITMAPINFOHEADER); bih.biSizeImage = size; bih.biWidth = btm.bmWidth; bih.biXPelsPerMeter = 0; bih.biYPelsPerMeter = 0; GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS); bfh.bfReserved1 = bfh.bfReserved2 = 0; bfh.bfType = ((WORD)('M'<< 8)|'B'); bfh.bfSize = 54 + size; bfh.bfOffBits = 54; CFileDialog dlg(false,_T("BMP"),_T("*.bmp"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("*.bmp|*.bmp|*.*|*.*|")); if (dlg.DoModal()!=IDOK) return; CFile bf; CString ss=dlg.GetPathName(); if(bf.Open(ss, CFile::modeCreate | CFile::modeWrite)) { bf.WriteHuge(&bfh, sizeof(BITMAPFILEHEADER)); bf.WriteHuge(&bih, sizeof(BITMAPINFOHEADER)); bf.WriteHuge(lpData, size); bf.Close(); AfxMessageBox((LPCTSTR)"保存成功",MB_OK); } GlobalFreePtr(lpData); } void MyWnd::DrawMsg(long m_SendMsg, short m_nLen) { CReadPacket rdPacket((char *)m_SendMsg,m_nLen); rdPacket.getData(); unsigned long nType ; unsigned long PenWidth; unsigned long nBeginPosX; unsigned long nBeginPosY; unsigned long nEndPosX; unsigned long nEndPosY; unsigned long nPosX,nPosY ; rdPacket>>nType; COLORREF cColor; HPEN pen,oldpen; HBRUSH hBrush,oldhBrush; char* m_textstr; if( nType==ID_TEXT1 ){ rdPacket>>(uint32&)nPosX >> (uint32&)nPosY >>m_textstr ; } else{ rdPacket>>(uint32&)nBeginPosX ; rdPacket>>(uint32&)nBeginPosY ; rdPacket>>(uint32&)cColor ; rdPacket>>(uint32&)PenWidth ; rdPacket>>(uint32&)nEndPosX ; rdPacket>>(uint32&)nEndPosY ; } pen = CreatePen(PS_SOLID, PenWidth, cColor); switch(nType){ case ID_TEXT1: { if(strlen(m_textstr)>0){ ::TextOut(m_hMemDC,nPosX,nPosY,m_textstr,strlen(m_textstr)); Invalidate(FALSE); } } break; case ID_PEN: { CPoint cp,cp1; cp1.x=-1; pen=CreatePen(PS_SOLID, PenWidth,cColor); oldpen = (HPEN)SelectObject(m_hMemDC,pen); SelectObject(m_hMemDC,pen); MoveToEx(m_hMemDC,nBeginPosX, nBeginPosY,NULL); while(1){ rdPacket>>(uint32&)cp1.x>>(uint32&)cp1.y; if((cp1.x==0) && (cp1.y==0)){ LineTo(m_hMemDC,cp.x,cp.y); break; } else{ cp=cp1; } LineTo(m_hMemDC,cp1.x,cp1.y); MoveToEx(m_hMemDC,cp1.x, cp1.y,NULL); cp1.x=-1; } SelectObject(m_hMemDC,oldpen); } break; case ID_LINE1: { oldpen = (HPEN)SelectObject(m_hMemDC,pen); SelectObject(m_hMemDC,pen); MoveToEx(m_hMemDC,nBeginPosX, nBeginPosY,NULL); LineTo(m_hMemDC,nEndPosX, nEndPosY ); SelectObject(m_hMemDC,oldpen); } break; case ID_ELLPLE: { oldpen = (HPEN)SelectObject(m_hMemDC,pen); SelectObject(m_hMemDC,pen); SetROP2(m_hMemDC,R2_NOTXORPEN); Ellipse(m_hMemDC,nBeginPosX, nBeginPosY,nEndPosX, nEndPosY); SelectObject(m_hMemDC,oldpen); } break; case ID_RECT: { oldpen = (HPEN)SelectObject(m_hMemDC,pen); SelectObject(m_hMemDC,pen); SetROP2(m_hMemDC,R2_NOTXORPEN); Rectangle(m_hMemDC,nBeginPosX, nBeginPosY,nEndPosX, nEndPosY); SelectObject(m_hMemDC,oldpen); } break; case ID_RECTFILL: { hBrush=CreateHatchBrush(3,cColor); oldhBrush=CreateHatchBrush(WHITE_BRUSH,RGB(255,255,255)); SelectObject(m_hMemDC,hBrush); SetROP2(m_hMemDC,R2_NOTXORPEN); Rectangle(m_hMemDC,nBeginPosX, nBeginPosY,nEndPosX, nEndPosY); SelectObject(m_hMemDC,oldhBrush); } break; case ID_ERASE: { pen=CreatePen(PS_DOT, 1, RGB(0,0,0)); oldpen = (HPEN)SelectObject(m_hMemDC,pen); SelectObject(m_hMemDC,pen); SetROP2(m_hMemDC,R2_NOTXORPEN); Rectangle(m_hMemDC,nBeginPosX, nBeginPosY,nEndPosX, nEndPosY); SelectObject(m_hMemDC,oldpen); DeleteObject(pen); CRect m_pRect(nBeginPosX, nBeginPosY,nEndPosX, nEndPosY); ::FillRect(m_hMemDC,&m_pRect, HBRUSH(RGB(0xFF,0xFF,0xFF))); } break; case ID_ELLFILL: { hBrush=CreateHatchBrush(3,cColor); oldhBrush=CreateHatchBrush(WHITE_BRUSH,RGB(255,255,255)); SelectObject(m_hMemDC,hBrush); SetROP2(m_hMemDC,R2_NOTXORPEN); Ellipse(m_hMemDC,nBeginPosX, nBeginPosY,nEndPosX, nEndPosY); SelectObject(m_hMemDC,oldhBrush); } break; } DeleteObject(pen); DeleteObject(hBrush); RECT rect; GetWindowRect(&rect); ScreenToClient(&rect); rect.top=rect.top+35; InvalidateRect(&rect); } void MyWnd::OnHand() { } void MyWnd::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy); } BOOL MyWnd::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ) { TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; UINT nID =pNMHDR->idFrom; for(int i=0;i<11;i++){ if(g_Dcmd[i].icmd==nID ){ strcpy(pTTT->lpszText,(LPCSTR)g_Dcmd[i].strText); pTTT->hinst = AfxGetResourceHandle(); return TRUE; } } return FALSE; }