GDI+编程中的错误
来源:互联网 发布:万网域名转让流程 编辑:程序博客网 时间:2024/06/01 07:48
在应用GDI+进行程序设计时,首先要对GDI+进行初始化。
先在应用程序类中加入成员变量 :
ULONG_PTR m_gdiplusToken;
应用程序类的InitInstance成员函数中加入如下的初始化代码:
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
但是在后面的程序中却出现了应用new对GDI+类型进行内存分配的错误。new Pen(...)返回为空。
其原因是初始化代码在InitInstance成员函数中的位置。我们来看一下常规的单文档应用程序的InitInstance()函数中的内容:
InitCommonControls();
CWinApp::InitInstance();
// 初始化 OLE 库
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
LoadStdProfileSettings(0); // 加载标准 INI 文件选项(包括 MRU)
// 注册应用程序的文档模板。文档模板
// 将用作文档、框架窗口和视图之间的连接
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CDisplayConsoleDoc),
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CLeftView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
// 分析标准外壳命令、DDE、打开文件操作的命令行
。。。。。
如果在该程序的最后加入
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
则在后面的程序中就会出现刚才提到的内存无法进行分配的错误。因为在以上两句带码之前,应用程序的文档、视图等对象均已生成和显示,所以此时再进行GDI+的初始化,可以说是为时已晚。正确的解决办法是将以上两行代码提前加入到InitInstance函数中。比较稳妥的办法是将其加入到最前面。无法进行new的错误即可解决。
- GDI+编程中的错误
- gdi编程中的资源泄露
- GDI编程
- GDI编程
- GDI+编程
- GDI编程
- GDI+ 编程
- GDI 编程
- gdi++编程
- GDI+编程
- GDI编程
- GDI编程
- GDI+编程
- 网络编程中的错误
- PHP编程中的错误
- GDI+编程基础 GDI+ Vs GDI
- GDI(GDI+) - 混合编程【实例】
- GDI与GDI+编程小结
- ImageProcessor批量图片处理工具1.0版(含源代码)
- c#获取远程主机的MAC地址(转贴)
- CMinus编译器0.3版(含源代码)
- 《面向对象程序设计与VC++实现》--第一章 疑难点汇集
- Tongji Online Judge ID:1013
- GDI+编程中的错误
- test
- 弹出窗口杀手,加了注释的源代码
- 搞 Java 也有一段时间了
- 使用hibernate心得——字符串超长的解决办法(setCharacterStream出现顺序问题)
- 单元测试之道 -使用JUnit
- AT89C51最小系统和RS-232串行接口
- 关于开发邮件服务器
- fdfdf