void XUI_Wnd::Render(const iRect& clipper) { if (!m_bVisible) return; iRect rcWindow = GetWindowRect(); ClientToScreen( rcWindow ); // XUI_SetClipping( rcWindow.left, rcWindow.top, rcWindow.Width(), rcWindow.Height() ); //绘制自己 if( m_bOwnerDraw ) { } else { RenderSelf( clipper.TopLeft() ); if( GetFlags(FLAGS_EDIT) ) { // XUI_SetClipping( rcWindow.left-HANDLE_EDGE, rcWindow.top-HANDLE_EDGE, rcWindow.Width()+HANDLE_EDGE*2, rcWindow.Height()+HANDLE_EDGE*2 ); RenderEdit( clipper.TopLeft() ); } } //绘制子控件 for (_uint32 i=0; i<m_pChildren.size(); i++) { m_pChildren[i]->Render(rcWindow); } }
int RenderWindowAndSubwindow(PWINDOW pWindow) { PLIST_ENTRY pEntry; int nContinueRander = 1; switch(pWindow->wtWindowType){ case WINDOW_TYPE_BUTTON: nContinueRander = RenderButton((PWINDOW_BUTTON)pWindow); break; case WINDOW_TYPE_LIST: nContinueRander = RenderList((PWINDOW_LIST)pWindow); break; case WINDOW_TYPE_EDIT: nContinueRander = RenderEdit((PWINDOW_EDIT)pWindow); break; case WINDOW_TYPE_RICHEDIT: nContinueRander = RenderRichEdit((PWINDOW_RICHEDIT)pWindow); break; case WINDOW_TYPE_BMP: // nContinueRander = RenderBMP(pWindow); break; case WINDOW_TYPE_DROP_LIST: nContinueRander = RenderDropList((PWINDOW_DROP_LIST)pWindow); break; case WINDOW_TYPE_SHOW_BOX: nContinueRander = RenderShowBox((PWINDOW_SHOW_BOX)pWindow); break; case WINDOW_TYPE_IME: nContinueRander = RenderIMEWindow((PWINDOW_IME)pWindow); break; } if(pWindow->wChildrenHead && nContinueRander){ RenderWindowAndSubwindow(pWindow->wChildrenHead); pEntry = pWindow->wChildrenHead->leEntry.pFlink; while(pEntry!=&pWindow->wChildrenHead->leEntry){ RenderWindowAndSubwindow((PWINDOW)pEntry); pEntry = pEntry->pFlink; } } return 1; }