CSDN 讨论总结系列:
- Jiangsheng的CSDN Digest (Dec 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/24/561501.aspx)
- Jiangsheng的CSDN Digest (Oct 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/27/563274.aspx)
- Win32 & .Net Q&A 200509 (http://blog.csdn.net/jiangsheng/archive/2005/09/13/480540.aspx)
- Win32 & .Net Q&A (http://blog.csdn.net/jiangsheng/archive/2005/02/28/304654.aspx)
- VC/MFC Q&A 200407 (http://blog.csdn.net/jiangsheng/archive/2004/07/13/40771.aspx)
Notes:
I would like to keep tracking some interesting CSDN discussions, but sometimes I can not find them due to the limit of the CSDN favorite and the CSDN full text search. So again I list some interesting discussions here. For details about the discussion, go to http://search.csdn.net and search posts by their topics. For previous Q&A discussions, see my blogs Win32 & .Net Q&A and VC/MFC Q&A 200407 . A topic may appear in these Q&A blogs more than once, but I will try to cover every interesting discussion if I can.
Title | 如何用程序控制电源管理设置 |
Q | 我们知道在电源选项 属性 里面可以设置 关闭监视器 1分钟之后,...,从不 关闭硬盘 1分钟之后,...,从不 待机时间 1分钟之后,...,从不 请问这些设置我怎么用程序来实现 比如我现在要把关闭监视器设成 5分钟之后 请问各位大虾,应该怎么办?是不是要调用API?如果是,应该调用什么函数? 另外补充说明:如果是调出控制面板让用户自己设置,这种功能我不需要,我要的是在程序里面自动完成这些操作,不需要用户的介入! |
A | To update an existing power scheme, call the WritePwrScheme, WriteGlobalPwrPolicy, or WriteProcessorPwrScheme function. Note that changes to the active power scheme do not automatically take effect. You must always call SetActivePwrScheme to update the active power scheme. 自己创建一个新的power scheme (WritePwrScheme) POWER_POLICY中USER_POWER_POLICY结构 VideoTimeoutAc VideoTimeoutDc是控制Display 的AC和Battery Power Power Control Panel中的“关闭监视器”是通过 VideoTimeoutAc 来设置的,单位为秒 SpindownTimeoutAc SpindownTimeoutDc控制硬盘 |
Title | 从CFileDialog派生自定义Open对话框的问题 |
Q | 我要自定义一个open对话框,除了common filedialog,添加了一些control,同时使用了hook,在hook proc中有 WM_INITDIALOG的定义,那么请问添加的control在什么地方定义,比如说我要 BOOL fdex_mfc_dlg::OnInitDialog() CListBox* pLB = (CListBox*)GetDlgItem(IDC_ENV); return TRUE; // return TRUE unless you set the focus to a control |
A | 文件对话框上的控件在收到WM_INITDIALOG甚至是CDN_INITDONE的时候都还不存在。最简单的解决方法是使用自定义消息 BOOL CMyOpenDlg::OnInitDialog() { CFileDialog::OnInitDialog(); PostMessage(MYWM_POSTINIT,0,0); return TRUE; } 然后在MYWM_POSTINIT的处理函数中操作文件对话框上的控件。因为使用了PostMessage,所以这个消息在之前消息队列中所有消息得到处理之后才会被处理,这时候文件对话框已经初始化完毕了。 |
Title | 能不能将一个ie的dll插件转换成active X组件做到自动下载并注册 |
Q | as title |
A | 因为网页中一般不能直接运行可执行程序(如.EXE程序),所以如果要实现一些自定义的方法,一般通过编写ActiveX控件,然后在ActiveX控件中实现所需要的功能,最终在网页中调用该ActiveX。 1.使用VB或者ATL工具来实现一个Active控件,在控件中向外暴露一个方法,该方法的功能为:首先将所要安装的程序下载到用户机器上,然后启动所下载的安装程序进行安装。 网页中调用ActiveX控件的方法如下: |
Title | 如果将插入WORD的ActiveX控件对象持久化到WORD文档中? |
Q | 需要知道相关的技术是什么?有了解的帮助指引一下! |
A | http://support.microsoft.com/support/kb/articles/q241/9/36.asp |
Title | 关于vc.net的几个问题。 |
Q | 1、使用vc.net“项目”中.net项中建立的类库能不能使用MFC,如果能使用那么编译后还是不是托管模块?其中引用到的MFC库中类是不是也编译成托管模块 2、使用vc.net“项目”中用MFC建立的应用程序在修改编译属性后编译为托管代码,那么这时程序的那一部分被编译为托管代码,还是全部被编译成托管的?这个程序能不能添加对程序集的引用? |
A | 1 可以使用MFC,但是因为很多MFC类依赖于CWinApp进行的全局MFC数据的初始化,所以建议还是用MFC向导来生成程序 2 MFC的DLL是非托管的,但是可以和托管代码一起工作。托管代码中当然可以引用程序集。 3 混合了非托管代码的程序很可能较难不加修改的移植到其它平台,尤其是在非托管代码包含对特定操作系统的API调用的情况下。 some of my blogs also discussed this topic: |
Title | 怎么样实现 CEditView 的某几行文字为不可编辑吗? |
Q | 我的 View 想每次建立的时候,自动在前几行输出内置的 文字,但是不想用户能够编辑它,可以接着这些文字下面继续编辑,这个该怎么实现?? 谢谢,有这方面的文章吗? |
A | 用richedit2.0的话可以把文字块保护起来 CFE_PROTECTED |
Title | WebBrowser的BeforeNavigate2事件如何添加Header啊? |
Q | BeforeNavigate2事件有个Headers As Variant参数,我怎样修改它? 我试过Headers = "Referer:http://www.csdn.net",好像不起作用啊,用嗅探器没看到添加的这个Header,请高手帮帮忙,谢谢! |
A | you can use the APP to strip Referer header. The header is attached by MSHTML in HttpNegotiate::BeginningTransaction. see also http://msdn.microsoft.com/workshop/networking/pluggable/pluggable.asp |
Title | 如何得到用 ATL 作的控件的窗口句柄,试了几个都无效,怎么回事? |
Q | 这ATL编成还真费劲,我用vs7做了个ATL控件,同时要导入一个别的绘图用的dll,但是该dll中的库函数全都需要窗口句柄,我试了控件类中的m_hWnd,m_hWndCD,GetWindow(HWND *phwnd)成员得到的句柄都无效,把它们的数值想办法显示出来后,发现全是0,我又用m_spInPlaceSite->GetWindow(&hwndParent),得到了控件的父窗体句柄,但是控件本身的句柄还是没有办法得到,弄了一天了,没有结果,太郁闷了,望高手相救。 |
A | windowless的控件没句柄(这是ATL Full Control的默认选项) 创建控件的时候在属性页中选择不透明就可以了 |
Title | 如何让CEdit控件属性为Read Only, 但是背景为白色而不是灰色 |
Q | as title |
A | WM_CTLCOLOR消息 HBRUSH CEditTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); pDC->SetBkColor( RGB(255, 255, 255) ); // text bkgnd return hbr; } |
Title | 想做个IE插件,屏蔽掉“浮动广告”,从何下手? |
Q | 最关键的是如何实现屏蔽“浮动广告” 用其它浏览器虽然可以屏蔽,但总觉得还是用IE顺手 |
A | 把绝对定位的元素都隐藏 但是这样会使得gmail、微软这样的网站也不能正常使用。 |
Title | 当一个USB设备和电脑连接,该USB驱动是系统自动识别的。系统如何能启动一个已经安装的程序呢? |
Q | 当一个USB设备和电脑连接,该USB驱动是系统自动识别的。系统如何能启动一个已经安装的程序呢? 这个有点类似数码相机的处理软件,当数码相机和电脑连接后,系统会自动调用一个以前安装的相机处理程序,这个是怎么作到的呢? |
A | 把自己的程序加入可移动介质的自动播放列表 |
Title | 有个问题请教IE编程高手 |
Q | 我用WebBrower控件,用IPersistStreamInit结构获取了当前网页的源文件,但是如果该网页是框架结构,就拿不到正确的源文件了,还有表单之类的,请教有什么解决方法吗?? 另一个就是如何将页面上的文字信息全部得到,比如CTRA+A复制下来粘贴到记事本里的。 |
A |
I made a copy of some paragraphs from the second article here because blogspot is inaccessible in many Chinese networks. Retrieving the HTML of the current selection |
Title | 请教一个关于Html视图的问题 |
Q | 我在对话框程序中嵌入了一个Html视图,打开了一个网页,现在我想向网页传数据,并且要重网页接收数据,我该怎么做啊??? |
A | http://blog.csdn.net/jiangsheng/archive/2003/08/15/3793.aspx 集成浏览器控件时获得文档接口 当集成浏览器控件的时候,执行下列步骤获得文档接口: 调用 IWebBrowser2::get_Document 获得文档的 IDispatch 接口。(译者注:MFC的CHtmlView的GetHtmlDocument方法,浏览器控件的Document属性或者DHtmlEdit控件的DOM属性也可以用于获取文档接口) 调用在前面步骤中获得的IDispatch指针的的QueryInterface,请求IID_IHTMLDocument2。 使用文档接口 一旦你获得了文档接口,你就可以使用任何一个IHTMLDocument2接口获得或修改文档的属性。这通常包括从文档包含的不同的元素中得到一些IHTMLElementCollection接口。 一个非常普遍的集合对象是all集合对象。all集合对象是通过使用IHTMLDocument2::all (译者注:原文如此,似乎应该改成get_all)方法获得的。 这个方法返回一个包含文档的所有元素的IHTMLElementCollection接口。然后你可以使用IHTMLElementCollection::item方法枚举元素。 IHTMLElementCollection::item方法为你提供一个你能调用 QueryInterface ,请求IID_IHTMLElement的IDispatch指针。这将会给你一个你能用来为个别的元素获得或设置信息的IHTMLElement接口指针。 大多数的元素提供一个接口操纵那个特定的元素。这些元素相关的接口名字具有IHTMLXXXXElement的格式,这里XXXX是元素的名字。要获得元素相关的接口,可以在IHTMLElement接口上调用QueryInterface,请求被需要的元素相关的接口。举例来说img 元素提供一个 IHTMLImgElement接口以可能用来明确地操纵img元素。要查看可用的元素相关的接口列表,查看接口和脚本对象的接口列表。 |
Title | Access数据库函数问题 |
Q | 使用Access数据库,用MS Access建一个查询Table1_View,SQL语句如下: SELECT MyName, StrReverse(MyName) AS ReMyName FROM Table1 ORDER BY StrReverse(MyName) 在MS Access中运行正常,可以打开Table1_View记录集,但要在C Builder中打开这个记录集时,返回错误信息:表达式中‘StrReverse’函数未定义。 请问是什么原因?如何解决? |
A | DAO中不支持从外部直接访问内建函数。参考http://support.microsoft.com/?kbid=210439 |
Title | >>>>平台调用问题,如何用C#模拟C++结构中的联合(C#调用C++DLL)?...在线等.. |
Q | 参阅文档(写的很清楚,但我的还是出错) http://www.cnblogs.com/allenlooplee/archive/2004/12/25/81917.html 问题是这样的:在C++DLL的接口函数中要传递一个结构,此结构中包括一个联合,我用C#来写这个结构并模拟这个联合,但老出错,请大家帮忙! C++结构声明原型 typedef struct cmppe_packetcmppe_packet; struct cmppe_packet{ cmppe_headpk_head;/*接收到的包头信息*///结构 dpl_int32_tresult;/*表明解析该包的结果*/ //无符号INT型 union{//联合 cmppe_deliverpk_deliver; cmppe_login_resppk_login_resp; cmppe_submit_resppk_submit_resp; }pk_data; }; 我用C#写的模拟: [StructLayout(LayoutKind.Sequential)] public struct cmppe_packet { public cmppe_headpk_head;/*接收到的包头信息*///结构 public intresult;/*表明解析该包的结果*/ public pk_data_struct pk_data; } /// /// C#结构实现联合的方法 cmppe_packet /// [StructLayout(LayoutKind.Explicit, Size=1000)]// public struct pk_data_struct { [FieldOffset(0)] public cmppe_deliverpk_deliver; [FieldOffset(0)] public cmppe_login_resppk_login_resp; [FieldOffset(0)] public cmppe_submit_resppk_submit_resp; } 作为参数传递此结构是用 REF 引用 类型的。 现在在执行时出现如下错误。 其他信息: 因为格式无效,未能从程序集 esp, Version=1.0.2060.400, Culture=neutral, PublicKeyToken=null 中加载类型 esp.pk_data_struct。 |
A | Interop and Unions http://blogs.msdn.com/jaredpar/archive/2005/05/13/417263.aspx 将 |
Title | 问个简单的VC问题 |
Q | 问个简单的VC问题啊: VC中打开文件对话框我想再增加一种类型,怎么修改那个资源字符串IDR_MAINFRAME啊,现内容是 Person/n/nPerson/nPER File(*.per)/n.per/nPerson.Document/nPerson Document 我想加个.txt的 |
A | 横秋的文件对话框教程 http://community.csdn.net/Expert/topic/4208/4208272.xml?temp=.3928339 MFC Document/View documentation and enhancements HOWTO: How to Support Two File Extensions per MFC Document Type |
Title | 怎样通过SHGetFileInfo取得"桌面"图标? |
Q | rt |
A | SHGetFileInfo IShellIcon::GetIconOf http://blog.csdn.net/jiangsheng/archive/2003/11/20/3796.aspx ITEMIDLIST* pidlDeskTop; |
Title | 向会使用“WebBrowser组件”的朋友请教! |
FAQ | 咱们用WebBrowser编写的浏览器,点击网页上的一个连接的时候,有时会使用IE打开页面,而不是使用咱们自己的浏览器打开页面,如何解决这个问题?? |
A | HOW TO: Use the WebBrowser Control NewWindow2 Event in Visual C# .NET. http://support.microsoft.com/?id=815714 |
Title | 如何用c++/cli继承自己的license类 |
Q | 我想从system.componentmodel.license继承自己的类,但是,dispose总是不行,请大家给个建议! public ref class MyLicense : public License { public: MyLicese(LicenseProvider^ owner, String^ key) { this->owner = owner; this->key = key; } // ~MyLicense(){} <-------------这两种都不行 // virtual void Dispose() override {} property String^ LicenseKey { virtual String^ get() override { return ""; } } private: LicenseProvider^ owner; String^ key; }; 上面是我的源代码。我重载dispose确实没有什么用处,但是我不重载的话,我的类也被认为成了abstract的了,因为基类license里的dispose是个纯虚的,我必须重载啊。不然我就没办法在我的licenseprovider的getlicense函数里gcnew 我的license类了。 |
A | public ref class R { public: !R() { Console::WriteLine( "I am the R::finalizer()!" ); } }; 在修订版语言设计中,析构函数被内部重命名为Dispose()方法,在派生类析构函数结束之后会自动调用基类析构函数。我不知道你重载Dispose方法有何特别处理。 建议重写基类,或者使用mc++语法编写你的派生类。 |
Title | 关于axWebBrowser控件的,如何判断它的newwindow2事件是因为遇到了包含“window.open”的脚本被触发还是用户选择了右键-》在新窗口打开 |
Q | 关于axWebBrowser控件的,如何判断它的newwindow2事件是因为遇到了包含“window.open”的脚本被触发还是用户选择了“右键-》在新窗口打开”而被触发? 小弟想做一个简易浏览器,屏蔽掉弹出窗口,但是允许用户选择“右键-》在新窗口打开”打开新窗口,请问有办法吗? |
A | 在Windows XP SP2中,弹出对话框之前会触发NewWindow3事件。 你也可以通过将window对象的showModalDialog属性设置设置为自己的函数来捕获弹出的窗口,但是这需要用类似insertAdjacentHTML的方法将自己的 |