CustomTemplateWindowStyle() :window(0) { Color borderColor(0, 122, 204); Color titleBackgroundColor(45, 45, 48); Color backgroundColor(30, 30, 30); Color titleColor(153, 153, 153); boundsComposition=new GuiTableComposition; boundsComposition->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); boundsComposition->SetRowsAndColumns(4, 7); boundsComposition->SetRowOption(0, GuiCellOption::AbsoluteOption(5)); boundsComposition->SetRowOption(1, GuiCellOption::MinSizeOption()); boundsComposition->SetRowOption(2, GuiCellOption::PercentageOption(1.0)); boundsComposition->SetRowOption(3, GuiCellOption::AbsoluteOption(5)); boundsComposition->SetColumnOption(0, GuiCellOption::AbsoluteOption(5)); boundsComposition->SetColumnOption(1, GuiCellOption::MinSizeOption()); boundsComposition->SetColumnOption(2, GuiCellOption::PercentageOption(1.0)); boundsComposition->SetColumnOption(3, GuiCellOption::MinSizeOption()); boundsComposition->SetColumnOption(4, GuiCellOption::MinSizeOption()); boundsComposition->SetColumnOption(5, GuiCellOption::MinSizeOption()); boundsComposition->SetColumnOption(6, GuiCellOption::AbsoluteOption(5)); { GuiSolidBackgroundElement* element=GuiSolidBackgroundElement::Create(); element->SetColor(borderColor); boundsComposition->SetOwnedElement(element); } AddBorderCell(0, 0, 1, 1, INativeWindowListener::BorderLeftTop); AddBorderCell(0, 6, 1, 1, INativeWindowListener::BorderRightTop); AddBorderCell(3, 0, 1, 1, INativeWindowListener::BorderLeftBottom); AddBorderCell(3, 6, 1, 1, INativeWindowListener::BorderRightBottom); AddBorderCell(1, 0, 2, 1, INativeWindowListener::BorderLeft); AddBorderCell(1, 6, 2, 1, INativeWindowListener::BorderRight); AddBorderCell(0, 1, 1, 5, INativeWindowListener::BorderTop); AddBorderCell(3, 1, 1, 5, INativeWindowListener::BorderBottom); { { iconComposition=AddTitleCell(1, INativeWindowListener::Icon, titleBackgroundColor); iconComposition->SetAlignmentToParent(Margin(3, 3, 3, 3)); Ptr<INativeImage> icon=GetCurrentController()->ImageService()->CreateImageFromFile(GetApplication()->GetExecutableFolder()+L"..\\Resources\\BigDoc.png"); iconElement=GuiImageFrameElement::Create(); iconElement->SetImage(icon, 0); iconElement->SetStretch(true); iconComposition->SetOwnedElement(iconElement); } { titleComposition=AddTitleCell(2, INativeWindowListener::Title, titleBackgroundColor); titleComposition->SetAlignmentToParent(Margin(0, 3, 3, 3)); titleElement=GuiSolidLabelElement::Create(); titleElement->SetColor(titleColor); titleElement->SetAlignments(Alignment::Left, Alignment::Center); titleComposition->SetOwnedElement(titleElement); } { minimumButton=AddTitleButton(3, titleBackgroundColor, titleColor); minimumButton->GetBoundsComposition()->SetAlignmentToParent(Margin(0, 3, 3, 3)); minimumButton->Clicked.AttachMethod(this, &CustomTemplateWindowStyle::minimumButton_Clicked); } { maximumButton=AddTitleButton(4, titleBackgroundColor, titleColor); maximumButton->GetBoundsComposition()->SetAlignmentToParent(Margin(0, 3, 3, 3)); maximumButton->Clicked.AttachMethod(this, &CustomTemplateWindowStyle::maximumButton_Clicked); } { closeButton=AddTitleButton(5, titleBackgroundColor, titleColor); closeButton->GetBoundsComposition()->SetAlignmentToParent(Margin(0, 3, 3, 3)); closeButton->Clicked.AttachMethod(this, &CustomTemplateWindowStyle::closeButton_Clicked); } } { GuiCellComposition* cell=new GuiCellComposition; boundsComposition->AddChild(cell); cell->SetSite(2, 1, 1, 5); cell->SetAssociatedHitTestResult(INativeWindowListener::Client); containerComposition=new GuiBoundsComposition; containerComposition->SetAlignmentToParent(Margin(0, 0, 0, 0)); cell->AddChild(containerComposition); GuiSolidBackgroundElement* element=GuiSolidBackgroundElement::Create(); element->SetColor(backgroundColor); containerComposition->SetOwnedElement(element); } }
BOOL CSkinWndHelper::Attach(HWND hWnd) { m_hWnd = hWnd; // Set the window property if( !SetProp(hWnd, g_szPropSkinWnd, (HANDLE)this)) return FALSE; m_oldWndProc = (WNDPROC)::GetWindowLongPtr(hWnd, GWLP_WNDPROC); ::SetWindowLongPtr(m_hWnd, GWLP_WNDPROC, (INT_PTR)CSkinWndHelper::WindowProc); CRect rcWnd; GetWindowRect(m_hWnd,&rcWnd); rcWnd.OffsetRect( -rcWnd.left, -rcWnd.top); CRect rcControl; rcControl.left = rcWnd.right- 35; rcControl.top = 5; rcControl.right = rcControl.left + 20; rcControl.bottom = rcControl.top + 20; DWORD dwStyle = (DWORD)GetWindowLong(m_hWnd, GWL_STYLE);;//获取样式 if (dwStyle&WS_MAXIMIZEBOX) { m_bHaveMaxBox = TRUE; } if (dwStyle&WS_MINIMIZEBOX) { m_bHaveMinBox = TRUE; } if (dwStyle&WS_SYSMENU) { m_bHaveCloseBtn = TRUE; } CDUIButton *pButton = AddTitleButton(rcControl,m_WindowBtnImage[2],3,ID_CLOSE_BTN); if (!m_bHaveCloseBtn) { pButton->EnableButton(FALSE); } if (m_bHaveMaxBox||m_bHaveMinBox) { pButton = AddTitleButton(rcControl,m_WindowBtnImage[1],3,ID_MAX_BTN); if (!m_bHaveMaxBox) { pButton->EnableButton(FALSE); } pButton = AddTitleButton(rcControl,m_WindowBtnImage[0],3,ID_MIN_BTN); if (!m_bHaveMinBox) { pButton->EnableButton(FALSE); } } //触发WM_NCCALLSIZE调用 SetWindowPos(m_hWnd,NULL,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); return TRUE; }