精华内容
下载资源
问答
  • [vc] mfc 对话框采用png的自定义格式
    2014-04-19 20:27:19
    OnPaint() 中添加
    
    CString pngFileName=L"D:\\图    样\\png图片\\linux.png";
    	CBitmap m_bmpDialog;
    	CDC dcMemory;
    	CDC* m_screenDC;
    
    	m_screenDC=new CDC();
    	m_screenDC->Attach(::GetDC(NULL));
    	dcMemory.CreateCompatibleDC(m_screenDC);
    	ModifyStyleEx(0,0x80000);
    
    	HBITMAP hBitmap;
    	hBitmap=CreateCompatibleBitmap(this->GetDC()->m_hDC,300,300);
    
    	{
    		HDC hDC;
    		WORD wBitCount=32;
    		DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, dwWritten=0;
    		BITMAP Bitmap; 
    		BITMAPINFOHEADER bi; 
    		LPBITMAPINFOHEADER lpbi; 
    		HANDLE hPal,hOldPal=NULL;
    		HBITMAP hDib;
    		GetObject(hBitmap, sizeof(Bitmap), (LPSTR)&Bitmap);
    		bi.biSize = sizeof(BITMAPINFOHEADER);
    		bi.biWidth = Bitmap.bmWidth;
    		bi.biHeight = Bitmap.bmHeight;
    		bi.biPlanes = 1;
    		bi.biBitCount = wBitCount;
    		bi.biCompression = BI_RGB;
    		bi.biSizeImage = 0;
    		bi.biXPelsPerMeter = 0;
    		bi.biYPelsPerMeter = 0;
    		bi.biClrImportant = 0;
    		bi.biClrUsed = 0;
    		dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;
    		hPal = GetStockObject(DEFAULT_PALETTE);
    		if (hPal)
    		{
    			hDC = ::GetDC(NULL);
    			hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE);
    			RealizePalette(hDC);
    		}
    		hDib = CreateDIBSection(hDC,(BITMAPINFO*)&bi,DIB_RGB_COLORS, (LPVOID*)&lpbi, NULL, 0);
    		GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight, (LPSTR)lpbi+dwPaletteSize, (LPBITMAPINFO)&bi, DIB_RGB_COLORS);
    		if (hOldPal)
    		{
    			::SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
    			RealizePalette(hDC);
    			::ReleaseDC(NULL, hDC);
    		}
    		CloseHandle(hPal);
    		CloseHandle(hOldPal);
    		DeleteObject(hBitmap);
    		hBitmap=hDib;
    	}
    	m_bmpDialog.DeleteObject();
    	m_bmpDialog.Attach(hBitmap);
    
    	CBitmap *pOldBitmap= dcMemory.SelectObject(&m_bmpDialog);
    	BITMAP bmpInfo;
    	m_bmpDialog.GetBitmap(&bmpInfo);
    	CRect rectDlg;
    	this->GetWindowRect(rectDlg);
    	CPoint ptWindowScreenPosition(rectDlg.TopLeft());
    	CSize szWindow(bmpInfo.bmWidth, bmpInfo.bmHeight);
    	BLENDFUNCTION blendPixelFunction= { AC_SRC_OVER, 0, 255, 0x01};
    	CPoint ptSrc(0,0);
    
    	//
    	//Image *m_bit=new Bitmap(pngFileName.AllocSysString());
    
    	Image *m_Png;
    	m_Png=Image::FromFile(pngFileName);
    	Graphics graphics(dcMemory.m_hDC);
    	graphics.DrawImage(m_Png,0,0);
    	//
    	graphics.ReleaseHDC(dcMemory.m_hDC);
    	
    	::UpdateLayeredWindow(this->m_hWnd,m_screenDC->m_hDC,
    		&ptWindowScreenPosition, 
    		&szWindow,
    		dcMemory,
    		&ptSrc, 0, 
    		&blendPixelFunction, 0x02);
    OnLButtonDown(UINT nFlags, CPoint point)
    {
    	PostMessage(WM_NCLBUTTONDOWN,   HTCAPTION,   MAKELPARAM(point.x,   point.y));
    	CDialog::OnLButtonDown(nFlags, point);
    }

    #include <gdiplus.h>
    using namespace Gdiplus;

    #pragma comment(lib,"gdiplus.lib")





    GdiplusStartupInput gdiplusStartupInput;
    GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

    更多相关内容
  • mfc 对话框显示PNG

    千次阅读 2018-07-19 16:30:11
    // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵。 //卸载GDI+ GdiplusShutdown(m_pGdiToken); return FALSE; } 在CxxDlg的Onpaint中实现显示 void ...

    使用GDI+可以轻松实现

    首先在CxxApp.cpp中加载GDI+

    BOOL CxxApp::InitInstance()
    {
    	// 如果一个运行在 Windows XP 上的应用程序清单指定要
    	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
    	//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
    	INITCOMMONCONTROLSEX InitCtrls;
    	InitCtrls.dwSize = sizeof(InitCtrls);
    	// 将它设置为包括所有要在应用程序中使用的
    	// 公共控件类。
    	InitCtrls.dwICC = ICC_WIN95_CLASSES;
    	InitCommonControlsEx(&InitCtrls);
    
    	CWinAppEx::InitInstance();
    
    	AfxEnableControlContainer();
    
    	//装载GDI+
    
    	GdiplusStartupInput m_gdiplusStartupInput;ULONG_PTR m_pGdiToken;
    	GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);
    
    	// 标准初始化
    	// 如果未使用这些功能并希望减小
    	// 最终可执行文件的大小,则应移除下列
    	// 不需要的特定初始化例程
    	// 更改用于存储设置的注册表项
    	// TODO: 应适当修改该字符串,
    	// 例如修改为公司或组织名
    	...
    	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
    	//  而不是启动应用程序的消息泵。
    
    	//卸载GDI+
    	GdiplusShutdown(m_pGdiToken);
    	return FALSE;
    }

    在CxxDlg的Onpaint中实现显示

    void CShowPngDlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // 用于绘制的设备上下文
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// 使图标在工作区矩形中居中
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// 绘制图标
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDC *pDC;
    
    		pDC =GetDC();
    
    		CRect  rect;
    
    		GetClientRect(&rect); 
    
    		Graphics graphics( pDC->m_hDC);     
    		Image image(_T("D:\\Documents\\Visual Studio 2008\\Projects\\ShowPng\\ShowPng\\res\\light.png"), FALSE);     
    		graphics.DrawImage(&image,250, 60,image.GetWidth(),image.GetHeight());  //绘制背景
    
    
    		//CPaintDC dc(this);        
    		//if(!img.IsNull()) img.Destroy();
    		//img.Load(_T("D:\\Documents\\Visual Studio 2008\\Projects\\ShowPng\\ShowPng\\res\\light.png"));                           //load载入,否则不显示
    		//TransparentPNG(&img);                               //调用透明化处理函数
    		//if(!img.IsNull()) 
    		//	img.Draw(dc.m_hDC, 200, 50);            
    		   
    		
    		CDialog::OnPaint();
    	}
    }
    

     

    显示效果如下:

    展开全文
  • (2)设置对话框的Border属性为none,编译运行,生成Debug目录,把bk.png图片放到Debug目录下。 (3)在CPNGBackgroundDialogTestApp添加获取应用程序路径的函数: //带斜杠 CString CPNGBackgroundDialogTestApp::...

    (1)新建一个基于对话框的MFC应用程序PNGBackgroundDialogTest,删除对话框中原有控件。
    (2)设置对话框的Border属性为none,编译运行,生成Debug目录,把bk.png图片放到Debug目录下。
    (3)在CPNGBackgroundDialogTestApp添加获取应用程序路径的函数:

    //带斜杠
    CString CPNGBackgroundDialogTestApp::GetAppPath(void)
    {
    	CString path=AfxGetApp()->m_pszHelpFilePath;   
    	CString   str=AfxGetApp()->m_pszExeName;   
    	path=path.Left(path.GetLength()-str.GetLength()-4);   
    
    	return path;
    }
    

    (4)在stdafx.h中加入GDI+相关的头文件和引用库:

    #include <gdiplus.h>
    using namespace Gdiplus; 
    #pragma comment(lib, "gdiplus.lib")
    

    (5)在BOOL CPNGBackgroundDialogTestApp::InitInstance()中加入GDI+的初始化代码:

    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    

    其中,gdiplusToken是一个全局变量:

    ULONG_PTR gdiplusToken;
    

    (6)在BOOL CPNGBackgroundDialogTestDlg::OnInitDialog()中添加如下代码:

    //设置GDI+相关变量
    	m_Blend.BlendOp=0; 
    	m_Blend.BlendFlags=0; 
    	m_Blend.AlphaFormat=1; 
    	m_Blend.SourceConstantAlpha=255;//AC_SRC_ALPHA
    
    	//窗体样式为0x80000为层级窗体
    	DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
    	SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);
    
    	//绘制内存位图
    	HDC hdcTemp=GetDC()->m_hDC;
    	m_hdcMemory=CreateCompatibleDC(hdcTemp);
    	HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,500,500);
    	SelectObject(m_hdcMemory,hBitMap);
    
    	//使用GDI+载入PNG图片
    	HDC hdcScreen=::GetDC (m_hWnd);
    	RECT rct;
    	GetWindowRect(&rct);
    	POINT ptWinPos={rct.left,rct.top};
    	Graphics graph(m_hdcMemory);			//GDI+中的类
    	CString strPath = theApp.GetAppPath()+L"bk.png";
    	Image image(strPath,TRUE);			//GDI+中的类
    	graph.DrawImage(&image,0,0,267,154);	//后面两个参数要设置成跟图片一样大小,否则会失真
    
    	//使用UpdateLayerWindow进行窗口透明处理
    	HMODULE hFuncInst=LoadLibrary(L"User32.DLL");
    	typedef BOOL (WINAPI *MYFUNC)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);          
    	MYFUNC UpdateLayeredWindow;
    	UpdateLayeredWindow=(MYFUNC)GetProcAddress(hFuncInst,"UpdateLayeredWindow");
    	SIZE sizeWindow={267,154};
    	POINT ptSrc={0,0};
    	UpdateLayeredWindow( m_hWnd,hdcScreen,&ptWinPos,&sizeWindow,m_hdcMemory,&ptSrc,0,&m_Blend,2);
    

    其中Blend和hdcMemory是类CPNGBackgroundDialogTestDlg的成员变量,定义如下:

    BLENDFUNCTION m_Blend;
    HDC m_hdcMemory;
    

    (7)此时运行工程,可以看到对话框的背景是png图片,但还不能移动,需要添加鼠标拖动代码:

    LRESULT CPNGBackgroundDialogTestDlg::OnNcHitTest(CPoint point)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    	UINT nHitTest=CDialog::OnNcHitTest(point);
    	return (nHitTest==HTCLIENT)?HTCAPTION:nHitTest;
    
    	//return CDialogEx::OnNcHitTest(point);
    }
    

    (8)保存并运行工程,运行结果如图所示:
    在这里插入图片描述

    展开全文
  • 游戏界面使用不规则窗口,GDI+ 使用不规则背景png图的时候,对话框成为跟背景图一样的形状。
  • txt2seq2png 文字->序列对话框-> PNG图片。 您可以轻松地将使用js-sequence-diagrams呈现的序列图另存为PNG。有关的格式,请参考。 去做 切换主题(手绘/简单) 以SVG格式保存
  • PNG对话框的显示方法

    2009-11-25 16:05:41
    PNG图 在对话框上显示 PNG对话框的显示方法
  • VC/MFC 对话框 按钮加载PNG图片 透明
  • 104款对话框——PNG素材,需要的下载。
  • 2、在对话框OnInitDialog中添加如下代码: //加载logo图片 CClientDC *pDC = new CClientDC(GetDlgItem(IDC_STATIC_LOGO)); HDC hDC = pDC->m_hDC; CRect rect; GetDlgItem(IDC_STATIC_LOGO)->...

    1、添加一个图片控件.

    2、在对话框OnInitDialog中添加如下代码:

    //加载logo图片
    	CClientDC *pDC = new CClientDC(GetDlgItem(IDC_STATIC_LOGO));
    	HDC hDC = pDC->m_hDC;
    	CRect rect;
    	GetDlgItem(IDC_STATIC_LOGO)->GetClientRect(&rect);
    	CImage image;
    	HRESULT lRet = image.Load("res\\logo.png");
    	::SetStretchBltMode(hDC, HALFTONE);
    	::SetBrushOrgEx(hDC, 0, 0, NULL);
    	image.Draw(hDC, rect);
    	ReleaseDC(pDC);
    	image.Destroy();

    3、然后,就好了。

    参考链接:https://www.cnblogs.com/rixiang/p/10024741.html

     

    效果图:

    展开全文
  • "PNG(*.png);;JPG(*.jpg);;BMP(*.bmp)" ) ; if ( ! strFileName . isNull ( ) ) { int nIndex = strFileName . lastIndexOf ( '.' ) ; //寻找‘.’符号在字符串中的id nIndex ++ ; int nLen = ...
  • PNG对话框及按钮绘制

    2012-11-02 10:44:13
    PNG对话框及按钮绘制,按钮有闪白现象的bug
  • 我电脑打不开png格式的图片,如何解决?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我电脑打不开png格式的图片,如何解决?直接找WINDOWS系统里...
  • png格式转为ai格式

    千次阅读 2021-01-28 14:14:35
    展开全部解决如何将png图像转换成清32313133353236313431303231363533e59b9ee7ad9431333431366364晰的ai或者cdr矢量图的步骤如下:1、打开PS软件,打开JPG的图片文件:文件--打开--(选择图片存放的路径 找到文件 ...
  • 对话框加载PNG背景图片

    千次阅读 2017-01-23 11:16:34
    image.Load(_T("./Images/背景png.png")); image.Draw(pDC->m_hDC,0,0,rect.Width(),rect.Height()); // 客户区加载背景图片 ,方法二 if(CAdvEdit::G_ImageFromIDResource(MAKEINTRESOURCE(IDR_BACK), ...
  • 编译环境vs2008,在对话框中插入各种格式的图片,本例子以png图片为例,并将该图片设置为透明背景。。
  • VC6.0显示PNG图片

    2016-08-29 18:38:01
    下面分别就单文档和基于对话框应用程序为例,说明使用GDI+的一般过程和方法。 1. 在单文档应用程序中使用GDI+ 在上面的过程中,我们就是以一个单文档应用程序Ex_GDIPlus作为示例的。下面列出第4步所涉及的代码: ...
  • MFC 不规则对话框(加载png 为背景)

    千次阅读 2013-05-29 22:59:32
    1:本文是使用的是 Gdi 的cImage 加载png 2:首先加载函数如下: bool CPNGDialogRegionDlg::LoadImageFromResource( CImage* pImage, UINT nResID, LPCWSTR lpTyp ) {  if (pImage == NULL) return false; ...
  • 不同的格式有不同的优点,有时工作中可以会需要到多张图片相同的格式,如果一张一张转换就会费时间,那么有怎么办法可以一键完成多张图片同时转换成相同格式的,所有这里要分享的是批量转换图片为PNG格式保存,下面...
  • 使用VC6 编写的一个透明对话框程序,无规则窗口边缘不再有毛刺!
  • 400个透明背景PNG小图片素材包。关键词:路标 箭头 对话框 柱形图 文本图标 问号 标签 文件夹 笔记本 饼图 邮件。
  • MFC png 图片加载

    热门讨论 2013-05-28 17:46:00
    MFC png 图片加载
  • tkinter.filedialog.asksaveasfilename() # 选择以什么文件名...有时候我们想要以选择文件对话框格式打开一张图片或者保存图片,我在尝试之后把我的代码分享给大家作为参考: 打开一张图片并显示 root = tkinte...
  • 如何制作一张PNG格式的透明图片水印,并给多个视频添加上呢?其实操作的方法很简单,下面随小编一起来操作。 材料准备: 一台电脑 安装一个视频剪辑高手 下载一个Photoshop 多张图片以及视频素材 步骤演示: 打开...
  • TinyPNG压缩器 :high_voltage: Sketch的插件,可使用TinyPNG API压缩位图资源。 该插件需要Sketch 3.8。 请注意,压缩效果略有损失,请... 将令牌粘贴到对话框中 你们都准备好了! 用法 只需选择要导出为jpg或png
  • 1.PNG格式是由Netscape公司开发出来的格式,可以用于网络图像,但它不同于GIF格式图像只能保存256色,PNG格式可以保存24位的真彩色图像,并且支持透明背景和消除锯齿边缘的功能,可以在不失真的情况下压缩保存图像。...
  • 在显示“另存为”对话框之前,将图像转换为PNG。 WebP是Google开发的一种新的图像格式。 这些图像很小,但是其格式尚未得到广泛认可。 通过将图像转换为PNG,您将能够在图像编辑程序中使用它,和/或将其上传到在线...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,086
精华内容 15,634
关键字:

对话框png格式