WEB开发网
开发学院软件开发VC 你有GIF的开发许可吗?PrecSubclassWindow 以及 M... 阅读

你有GIF的开发许可吗?PrecSubclassWindow 以及 MFC 中的 EOF

 2009-02-21 20:00:10 来源:WEB开发网   
核心提示: 不幸的是,最终的结果就是这样,你有GIF的开发许可吗?PrecSubclassWindow 以及 MFC 中的 EOF(2),我不能给你任何帮助,如果你正在写一个读写GIF的程序,Windows 系统都会在内部创建控件,CWnd::CreateEx 将不会被调用,你应该去Unisys网站来

不幸的是,最终的结果就是这样,我不能给你任何帮助。如果你正在写一个读写GIF的程序,你应该去Unisys网站来自己确定。Unisys工作人员会很 乐意给你他们律师的电话。很明显,整个关于GIF/LZW专利权的事情引起了很大的争议,其中一方是信仰软件开源的人。你可以去 http://lzw.info 对“LZW patent”作一个快速预览或者搜索相关的网站。

我有一个CListBox的子类。为了使用它的扩展功能,列表框必须是自绘的。我改写了 PreCreateWindow 虚函数来强制设置LBS_OWNERDRAWFIXED 样式。如果列表框是 由我自己动态创建的则运行正常。如果列表框作为对话框的一部分从资源加载,则怎么也不会调用 PreCreateWindow。这种情况下我怎样才能保证 LBS_OWNERDRAWFIXED 样式被设置呢?

Frank Lagattuta

简短的回答是:使用 PreSubclassWindow。

以下是详细的使用方法。PreCreateWindow 是一个由 MFC 调用的特殊的 CWnd 虚函数,你可能已经猜到了,该函数是在创建窗口前被调用。 也就是说,当你调用 CWnd::Create或CWnd::CreateEx 创建一个窗口时,MFC在 Windows 系统实际创建你的窗口前调用 CWnd::PreCreateWindow。

BOOL CWnd::CreateEx(...)
{
 CREATESTRUCT cs;
 ...
 // init cs
 if (!PreCreateWindow(cs)) {
  PostNcDestroy();
  return FALSE;
 }
 ...
 // create the window
 return TRUE;
}

但是对话框不是这样创建的。当你调用 CDialog::DoModal 时,对话框才被创建,在这种情况下 MFC 使用::CreateDlgIndirect 来加载你的对话框模板,它大致与 ::DialogBox 功能相同。不管调用哪个函数,Windows 系统都会在内部创建控件,CWnd::CreateEx 将不会被调用。因此你自己控件的 PreCreateWindow 也不会被调用。

上一页  1 2 3 4 5 6 7  下一页

Tags:GIF 开发 许可

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接