当前位置: 首页>>代码示例>>C++>>正文


C++ wxRegion::GetHRGN方法代码示例

本文整理汇总了C++中wxRegion::GetHRGN方法的典型用法代码示例。如果您正苦于以下问题:C++ wxRegion::GetHRGN方法的具体用法?C++ wxRegion::GetHRGN怎么用?C++ wxRegion::GetHRGN使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在wxRegion的用法示例。


在下文中一共展示了wxRegion::GetHRGN方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: SetShape

bool SetShape(const wxRegion& region, wxWindow* frame)
{
#if defined(__WXMSW__) && !defined(__WXWINCE__)
	// The empty region signifies that the shape should be removed from the
    // window.
    if ( region.IsEmpty() )
    {
        if (::SetWindowRgn((HWND)frame->GetHWND(), nullptr, TRUE) == 0)
        {
            wxLogLastError(_T("SetWindowRgn"));
            return false;
        }
        return true;
    }

    DWORD noBytes = ::GetRegionData((HRGN)(region.GetHRGN()), 0, nullptr);
    RGNDATA *rgnData = (RGNDATA*) new char[noBytes];
    ::GetRegionData((HRGN)(region.GetHRGN()), noBytes, rgnData);
    HRGN hrgn = ::ExtCreateRegion(nullptr, noBytes, rgnData);
    delete[] (char*) rgnData;
   
    RECT rect;
    DWORD dwStyle =   ::GetWindowLong((HWND)frame->GetHWND(), GWL_STYLE);
    DWORD dwExStyle = ::GetWindowLong((HWND)frame->GetHWND(), GWL_EXSTYLE);
    ::GetClientRect((HWND)frame->GetHWND(), &rect);
    ::AdjustWindowRectEx(&rect, dwStyle, FALSE, dwExStyle);
    ::OffsetRgn(hrgn, -rect.left, -rect.top);

    if (::SetWindowRgn((HWND)frame->GetHWND(), hrgn, TRUE) == 0)
    {
        wxLogLastError(_T("SetWindowRgn"));
        return false;
    }
    return true;
    
#elif defined(__WXMAC__)
	if ( region.IsEmpty() )
    {
        wxSize sz = T->GetClientSize();
        wxRegion rgn(0, 0, sz.x, sz.y);
        return T->SetShape(rgn);
    }

    // Make a copy of the region
    RgnHandle  shapeRegion = NewRgn();
    CopyRgn( (RgnHandle)region.GetWXHRGN(), shapeRegion );

    // Dispose of any shape region we may already have
    RgnHandle oldRgn = (RgnHandle)GetWRefCon( (WindowRef)GetHandle() );
    if ( oldRgn )
        DisposeRgn(oldRgn);

    // Save the region so we can use it later
    SetWRefCon((WindowRef)GetHandle(), (SInt32)shapeRegion);

    // Tell the window manager that the window has changed shape
    ReshapeCustomWindow((WindowRef)GetHandle());
    return true;

#elif defined(__WXGTK__)

	GtkWidget* m_wxwindow = frame->m_wxwindow;
	GtkWidget* m_widget = frame->m_widget;

	if (region.IsEmpty())
	{
		if (m_wxwindow && GTK_WIDGET_NO_WINDOW(m_wxwindow))
			gtk_widget_shape_combine_mask(m_wxwindow, nullptr, 0, 0);

		if (m_widget && GTK_WIDGET_NO_WINDOW(m_widget))
			gtk_widget_shape_combine_mask(m_widget, nullptr, 0, 0);
	}
	else
	{
		wxBitmap bmp = ConvertRegionToBitmap(region);
		bmp.SetMask(new wxMask(bmp, *wxBLACK));
		
		GdkBitmap* mask = bmp.GetMask();

		if (m_wxwindow)
			gtk_widget_shape_combine_mask(m_wxwindow, mask, 0, 0);

		if (m_widget)
			gtk_widget_shape_combine_mask(m_widget, mask, 0, 0);
	}

	return true;
#else
	return false;
#endif
}
开发者ID:callumlinden,项目名称:desura-app,代码行数:91,代码来源:gcImageControl.cpp


注:本文中的wxRegion::GetHRGN方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。