VC技巧--04

201 单文档中打印预览,发送消息模拟点击菜单中“打印预览”:
---------------------------------------------------------------------------------
::SendMessage(this->GetSafeHwnd(), WM_COMMAND, ID_FILE_PRINT_PREVIEW, 0);
---------------------------------------------------------------------------------
202 得到当前登陆用户的用户名:GetUserName/GetUserNameEx
203 设置发生改变后系统会自动更新,要善加利用:::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL);
204 拖动一个没有标题栏的窗口:
-----------------------------------------------------------------------
void CMyControl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
UNUSED_ALWAYS(nFlags);
if (!(GetWindowLong(m_hWnd, GWL_STYLE) & WS_CHILD))
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
else
GetParent()->PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
}
-----------------------------------------------------------------------
205 用指定字体在dc中写字:
-------------------------------------------------------
HDC hdc = ::GetDC(NULL);
HFONT hfont,holdfont;
hfont = (HFONT)GetStockObject(OEM_FIXED_FONT);
holdfont = (HFONT)SelectObject(hdc,hfont);
TextOut(hdc,10,50,"\1\2\3\4",8);
SelectObject(hdc,holdfont);
DeleteDC(hdc);
-------------------------------------------------------
206 桌面主题更改的消息:WM_THEMECHANGED
207 修改菜单项的名称:
CMenu *pMenu = AfxGetMainWnd()->GetMenu()->GetSubMenu(0);
pMenu->ModifyMenu(0,MF_BYPOSITION,0,"Test");
208 __LINE__表示本行代码在程序中第几行,同样:__FILE__表示当前文件的全路径
----------------------------------
CString str;
str.Format("Line is %d", __LINE__);    //指这行
AfxMessageBox(str);
----------------------------------
209 查看系统函数的源代码的方法:装一个Visual Assist X,想看某个函数的时候ALT + G
210 一直以来,想实现窗口透明程度不同,或局部透明,局部不透明,但这也只是梦想,下面这个函数看来可以让我们梦想成真:UpdateLayeredWindow
211 LOGFONT各成员的意义:
---------------------------------------------------------------------------------
LOGFONT lf;
lf.lfHeight=-80;                                   //字体字符的高度
lf.lfWidth=0;                                      //字符平均宽度
lf.lfEscapement=45;                                //文本行逆时针旋转45度
lf.lfOrientation=0;                                //字符角度
lf.lfWeight=FW_HEAVY;                              //字符的粗细度
lf.lfItalic=FALSE;                                 //倾斜
lf.lfUnderline=FALSE;                              //下划线
lf.lfStrikeOut=FALSE;                              //删除线
lf.lfCharSet=GB2312_CHARSET;                       //中文字符集
lf.lfOutPrecision=OUT_STROKE_PRECIS;               //字体输出结果和要求的匹配程度
lf.lfClipPrecision=CLIP_STROKE_PRECIS;             //如何裁剪落于裁剪区之外的字符
lf.lfQuality=DRAFT_QUALITY;                        //字体属性匹配的精确程度
lf.lfPitchAndFamily=VARIABLE_PITCH | FF_MODERN;    //字体间距和字体族
strcpy(lf.lfFaceName,"楷体_GB2312");               //楷体
m_font.CreateFontIndirect(&lf);             //m_font为类的成员变量:CFont m_font;
---------------------------------------------------------------------------------
212 指向指象主对话框的指针:AfxGetApp()->m_pMainWnd或AfxGetApp()->GetMainWnd()
213 去除F1的帮助功能,重载WM_HELPINFO消息:
------------------------------------------------------
BOOL CYourdlgDlg::OnHelpInfo(HELPINFO* pHelpInfo)
{
return TRUE;//CDialog::OnHelpInfo(pHelpInfo);
}
------------------------------------------------------
214 串口(包括USB转串口)几个小问题:http://community.csdn.net/Expert/topic/4470/4470922.xml?temp=.9018061
215 控制输入法相关的几个函数:ImmGetContext、ImmGetConversionStatus、ImmSetConversionStatus、ImmReleaseContext等
216 限定输出字符的矩形范围:ExtTextOut或DrawText
217 控制滚动条的显示或隐藏:CWnd::ShowScrollBar(UINT nBar,BOOL bShow = TRUE)
218 注册表中:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum下IDE和SCSI分支中枚举所有这两种设备。
219 更改当前时区:SetTimeZoneInformation
   获得当前时区:GetTimeZoneInformation
220 直接读取硬盘的指定扇区:
(1)用汇编;
(2)直接用CreateFile("\\.\PHYSICALDRIVE0", ...)打开物理磁盘设备即可(物理磁盘设备都是从0开始排号的,0表示第一块硬盘,1表示第二块硬盘....),这样用SetFilePointer可以随意读取硬盘上任何位置的东西!至于扇区嘛,一般都是512字节为1扇区的,自己换算就是了~          <===================还没试,不过这里有更多内容:http://www.51cto.com/html/2005/1110/11133.htm
221 获得本机并口的起始地址:
可以读取bios数据区域,当然只能在未进入保护模式的操作系统前或dos下读取
段地址:00H

408H 字 计算机上0号并行打印机适配器的基地址,
40AH 字 计算机上1号并行打印机适配器的基地址。
40CH 字 计算机上2号并行打印机适配器的基地址。
40EH 字 计算机上3号并行打印机适配器的基地址。(PS2型此值为扩展BIOS数据区段地址)
SetupAPI可以得到所有设备的信息包括IO端口,内存资源,中断号码
222 更换桌面背景:
方法一:
  看这里:http://www.vckbase.com/vckbase/vckbase10/vc/nonctrls/atlcomocx_02/1002001.htm,用了com中IActiveDesktop,这是个活动桌面的COM接口,还有智能指针,可以顺便学习一下这方面内容;
方法二:
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\\aa.bmp", 1); //jpg图片不行,无法显示
223 让多行风格的编辑框控件显示指定行又一法:m_txt.LineScroll(m_txt.GetLineCount()); //m_txt为CEdit控件绑定变量
224 控制音量API:waveOutSetVolume
225 在程序运行期间,怎样禁止窗口右上方的关闭按钮
---------------------------------------------------------------
CMenu *pMenu = AfxGetMainWnd()->GetSystemMenu(FALSE) ;
if (pMenu)
pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED) ;
// 变为非禁止状态
CMenu *pMenu = AfxGetMainWnd()->GetSystemMenu(FALSE) ;
if (pMenu)
pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_ENABLED) ;
---------------------------------------------------------------
226 请问如何让SDI程序启动时自动隐藏:http://community.csdn.net/Expert/topic/4602/4602225.xml?temp=.1871607
     http://blog.csdn.net/enoloo/archive/2004/06/07/17638.aspx                 //这个是要最大化的
把pMainFrame->ShowWindow(SW_HIDE);这句加在ParseCommandLine(cmdInfo);的后面,if (!ProcessShellCommand(cmdInfo))的前面
227 经常有人问有没有高效的方法,可以知道一个文本文件有多少行,抽空写了几行代码回复在贴子中:http://community.csdn.net/Expert/topic/4601/4601972.xml?temp=.5953943
228 精确的计时:                               <========================还没试
__int64     lfreq;
BOOL     bret=QueryPerformanceFrequency((LARGE_INTEGER*)&lfreq);
__int64     lstart;
QueryPerformanceCounter((LARGE_INTEGER*)&lstart);
//...   call   your   function
__int64     lstop;
QueryPerformanceCounter((LARGE_INTEGER*)&lstop);
__int64   lruntime=lstop   -   lstart;
double   dsec=   lruntime/lfreq;
229 命令行处理的封装类CCommandLineInfo和CCommandLineInfoEx
230 操作临时文件,临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()获得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名:
-----------------------------------------
char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];
GetTempPath(_MAX_PATH, szTempPath);
GetTempFileName(szTempPath,_T("my_"),0,szTempfile);
-----------------------------------------
231 弹出USB设备安全删除对话框:WinExec("C:\\WINDOWS\\system32\\rundll32.exe shell32.dll,Control_RunDLL hotplug.dll",SW_SHOW);
232 弹出“数据链接属性”对话框:IDataSourceLocatorPtr::PromptNew();
233 ActiveSkin 4.3 软件换肤在VC中的实现:http://www.vckbase.com/document/viewdoc/?id=1288
234 CBitmap=====>HBITMAP:
-------------------------------------------------------------------------------------
CBitmap bitmap;
HBITMAP hbitmap=(HBITMAP)bitmap;          //CBitmap中重载了HBITMAP()操作符,可以方便地用它来强制转换
-------------------------------------------------------------------------------------
   HBITMAP=====>CBitmap:
---------------------------------------
HBITMAP hbitmap;
CBitmap bitmap;
bitmap.FromHandle(hbitmap);
---------------------------------------
235 从其它.exe文件提取.ico图标作为自己程序的图标:
----------------------------------------------------------------------
HINSTANCE hInst = LoadLibrary("b.exe");
HRSRC hRc = FindResource(hInst, (LPCSTR)1, (LPCSTR)RT_ICON);
LPVOID lpResource = LockResource(LoadResource(hInst,hRc));

HANDLE hUpdate = BeginUpdateResource("a.exe", FALSE);
UpdateResource(hUpdate, (LPCSTR)RT_ICON, (LPCSTR)1, 0, lpResource, SizeofResource(hInst, hRc));
EndUpdateResource(hUpdate, FALSE);

CloseHandle(hRc);
FreeLibrary(hInst);
-----------------------------------------------------------------------
236 得到当前屏幕的参数,最好是用函数EnumDisplaySettings(其它的方法如:GetSystemMetrics(SM_CYFULLSCREEN);会因为任务栏是否隐藏而可能得不到真实高度),这个函数功能强大,可根据指定的设备名(第一个参数)返回它的显示信息:
-------------------------------------------------------------------------------
CString strCurrentDifferency,strCurrentColorMode;                     //分别用来存放屏幕当前分辨率、色彩位数的字符串
LPDEVMODE gpCurrentMode = new DEVMODE;                                //用来存储屏幕当前设置的结构指针
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, gpCurrentMode);      //获得当前分辨率的大小和其它信息
strCurrentDifferency.Format("分辨率:%d*%d",gpCurrentMode->dmPelsWidth,gpCurrentMode->dmPelsHeight);
strCurrentColorMode.Format("当前颜色位数:%d",gpCurrentMode->dmDisplayFrequency);
AfxMessageBox(strCurrentDifferency);
AfxMessageBox(strCurrentColorMode);
delete gpCurrentMode;
gpCurrentMode=NULL;
--------------------------------------------------------------------------------
用CDC::GetDeviceCaps函数也可以:
-------------------------------------------------------------------------------------------------------
CString strCurrentDifferency;
CDC *pDC=CDC::FromHandle(::GetDC(0));    //随便获得一个DC指针就可以了,这里是获得桌面的DC
strCurrentDifferency.Format("分辨率:%d*%d",pDC->GetDeviceCaps(HORZRES),pDC->GetDeviceCaps(VERTRES));
AfxMessageBox(strCurrentDifferency);
-------------------------------------------------------------------------------------------------------
237 组合框控件在Dropdown类型时,如何设置其为只读的:
-----------------------------------------------------------------------------
CComboBox *pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1);
HWND hEdit = ::FindWindowEx(pCombo->GetSafeHwnd(), NULL, _T("EDIT"), NULL);
if (hEdit)
::SendMessage(hEdit, EM_SETREADONLY, TRUE, 0);
-----------------------------------------------------------------------------
238 解决这个工程出现重复编译的错误:http://community.csdn.net/Expert/topic/4610/4610652.xml?temp=.9251825
239 侦测计算机是否连上网络:InternetGetConnectedStateEx
240 枚举软件或硬件设备:IMDServiceProvider::EnumDevices
241 对话框中控件内容的打印:http://community.csdn.net/Expert/topic/4609/4609829.xml?temp=.1613275
   使你的dialog支持打印预览:http://www.codeproject.com/printing/#Print+Preview
   http://www.codeproject.com/listctrl/listprintdemo.asp
   现在没有打印机可试,记在这里先,以后有了再测试。
242 结束其它的进程:GetWindowThreadProcessId和TerminateProcess函数,不过TerminateProcess尽量少用,它可以直接结束目标进程,目标进程死都不知道是自己怎么死的,来不及保存自己的数据结果,也来不及通知自己所调用的.dll文件不用给自己做晚饭了,当然也来不及打电话给它的子进程说:“阿珍,其实我一直都想对你说:我爱你!”
这里还有个贴子:http://community.csdn.net/Expert/topic/4608/4608816.xml?temp=.9869654
243 用LockFile函数锁定一个打开文件的某一个区域,可以防止其它进程访问该区域。
244 使CListCtrl控件的Item标签可以修改:ModifyStyle(0,LVS_EDITLABELS);
245 如何动态的改变菜单项在状态栏中的提示:http://community.csdn.net/Expert/topic/4615/4615363.xml?temp=2.514064E-03
重载CFrameWnd的virtual void GetMessageString(UINT nID, CString& rMessage) const;函数

实现:
--------------------------------------------------------------------------------
void CMainFrame::GetMessageString(UINT nID, CString& rMessage) const
{
if(nID == ID_FILE_NEW) //这里可以动态改变
{
   rMessage = "Create new file!";
   return;
}
CFrameWnd::GetMessageString(nID,rMessage); //调用默认的处理过程
}
--------------------------------------------------------------------------------
对话框工程中:
Handle the WM_MENUSELECT message. The wParam is the menu index, which is also the index of the stringtable entry that describes the menu. This prompting is ordinarily handled by the mainframe, but in a dialog-based app you have to add your own handler
246 修改.exe或其它模块的资源,参考下面几个函数:            <===========没试过,不过看上去可行,用到时再试吧^_^
LoadLibrary
FindResource
LoadResource
LockResource
BeginUpdateResource
UpdateResource
EndUpdateResource
FreeResource
具体见MSDN,上面同时给出了调用顺序,看了参数就明白了
247 请问NULL和null,TRUE和true,FALSE和false等有啥区别?
1.FALSE/TRUE与false/true的区别:
false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
也就是说FALSE/TRUE是int类型,而false/true是bool类型;所以两者不一样的,只不过我们在使用中没有这种感觉,因为C++会帮你做隐式转换。
2.bool的大小与BOOL的区别:
bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言
248 CFile::GetStatus也可以获得文件的属性信息
249 获取桌面所有顶级窗口:EnumDesktopWindows、EnumWindowsProc
250 显示用DirectShow捕捉下来的视频:
DirectShow的 IVideoWindow可以设置
---------------------------------------------------------------------
IVideoWindow *pVidWin = NULL;
pGraph->QueryInterface(IID_IVideoWindow, (void **)&g_pVidWin);
pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
RECT grc;
GetClientRect(hwnd, &grc);
pVidWin->SetWindowPosition(0, 0, grc.right, grc.bottom);
---------------------------------------------------------------------
251 改变编辑框控件中光标的图形:
----------------------------------------------------------
CBitmap* pBitmap = new CBitmap;
pBitmap->LoadBitmap(IDB_HAPPY_BITMAP);    //IDB_HAPPY_BITMAP为工程中.bmp资源,大小任意,但颜色超过16色的话色彩会失真
m_editCtrl.CreateCaret(pBitmap);          //m_editCtrl为编辑框控件变量
POINT point;
point.x=0;
point.y=0;
m_editCtrl.SetCaretPos(point);            //改变光标的位置,以像素为单位
m_editCtrl.ShowCaret();
----------------------------------------------------------
252 用主题函数改变对话框窗口的可视风格(MSDN上可查到更多这方面的函数):
----------------------------------------------------------------
#include <uxtheme.h>
#pragma comment(lib,"uxtheme.lib")
void CMyDlg::OnTest()
{
EnableThemeDialogTexture(m_hWnd,ETDT_ENABLE | ETDT_USETABTEXTURE);
Invalidate();
}
----------------------------------------------------------------
253 如何让MDI程序在启动的时候不新建子窗口:http://community.csdn.net/Expert/topic/4619/4619802.xml?temp=.2809107
在App的InitInstance中加一行:
--------------------------------------------------------
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing;   //添加这一句
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
--------------------------------------------------------
254 关机:ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0 )                  <=====还没试
强制关机ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0 );
255 hook:http://community.csdn.net/Expert/topic/4615/4615606.xml?temp=.7596094
256 字符串====>日期时间:
-------------------------------------------------
COleDateTime dt;
dt.ParseDateTime(_T("2006-2-14 8:00:00"));
SYSTEMTIME st={0};
dt.GetAsSystemTime(st);
//SetLocalTime(&st);       //设置电脑中时间
-------------------------------------------------
   日期时间====>字符串:
-------------------------------------------------
SYSTEMTIME st={0};
st.wYear=2006;
st.wMonth=3;
st.wDay=23;
st.wHour=8;
st.wMinute=30;
st.wSecond=59;
COleDateTime dt(st);
AfxMessageBox(dt.Format());
-------------------------------------------------
257 typeid函数可以判断一个对象的类型,详见MSDN,上面有示例代码,不过有点小问题:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_typeid_operator.asp
258 系统休眠,摘自:http://community.csdn.net/Expert/topic/4637/4637403.xml?temp=.8914301
------------------------------------------------------------------------------------------------
if(MessageBox("确实要休眠吗?","关机程序",MB_YESNO|MB_DEFBUTTON2|MB_ICONQUESTION)==IDYES)
{
static HANDLE hToken;
static TOKEN_PRIVILEGES tp;
static LUID luid;
if(::OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
   ::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
   tp.PrivilegeCount=1;
   tp.Privileges[0].Luid =luid;
   tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;
   ::AdjustTokenPrivileges(hToken,false,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
}
::SetSystemPowerState(false,true);
}
-------------------------------------------------------------------------------------------------
259 在录音时如何控制录音属性中麦克风或者线路输入的音量
1.mixerGetNumDevs获取混音设备数量
2.循环获取设备信息mixerOpen/mixerGetLineInfo
3.根据获得的MIXERLINE中dwComponentType判断类型来确定是线入/麦克风
               MIXERLINE_COMPONENTTYPE_SRC_LINE/MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE
4.mixerSetControlDetails设置音量
260 用资源管理器打开指定文件夹,并置目标文件夹为选定状态:WinExec("explorer /n,/select,f:\\win98", SW_SHOWNORMAL );
261 打开或关闭输入法:IActiveIME::SetActiveContext
262 提取.exe或.dll文件中的图标:ExtractIcon
263 捕捉其他程序最大、最小化消息:http://community.csdn.net/Expert/topic/4647/4647630.xml?temp=.8477289
264 WM_DEVICECHANGLE消息配合DeviceIoControl函数可禁用U盘
265 判断编辑框控件是否为只读的:
----------------------------------------------------
CEdit *temp=(CEdit *)GetDlgItem(IDC_EDIT1);
DWORD a=temp->GetStyle();
if(a & ES_READONLY)           //ES_READONLY=0x800
AfxMessageBox("Read only");
else
AfxMessageBox("NOT read only");
----------------------------------------------------
266 获得系统电源状态:
GetSystemPowerStatus

Retrieves the power status of the system. The status indicates whether the system is running on AC or DC power, whether the battery is currently charging, and how much battery life remains.
267 桌面元素的操作:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/activedesktop.asp
268 如何判断是键盘左边的Shift还是右边的Shift键,摘自:http://community.csdn.net/Expert/topic/4661/4661661.xml?temp=8.190554E-02
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/virtualkeycodes.asp
上面URL中MSDN给出了所有按键的ASCII码。

VK_LSHIFT (A0)
     Left SHIFT key

VK_RSHIFT (A1)
     Right SHIFT key
269 C++开发常用工具:http://blog.vckbase.com/FlowSand/archive/2006/01/27/17447.html
270 sprintf中打印百分号%的方法,摘自:http://blog.vckbase.com/smileonce/archive/2006/03/16/18521.html
------------------------------------------------------------
int percent = 50;
char buf[100];
sprintf(buf, "%d%%%% complete\n! ", percent);
printf(buf);       //这样就只打印一个%了
printf("%s",buf); //改成这样后打印出两个%了,恰如我们期望的
------------------------------------------------------------
271 精确延时,KeStallExecutionProcessor函数来帮你,摘自:http://blog.vckbase.com/zaboli/archive/2006/03/24/18705.html
但是问题是KeStallExecutionProcessor的文档说,他的最小周期不能大于 50微秒!不然会造成系统停顿。。
测试得出 KeStallExecutionProcessor(416)在有的机器上会造成鼠标停顿 -_-但是KeDelayExecutionThread(KernelMode, FALSE, &WaitTime); 无论再怎么设置小的超时,结果都如下10毫秒???差太多了吧。。。
272 向控件发送鼠标滚轮的消息:
::SendMessage(m_cListCtrl.m_hWnd,WM_MOUSEWHEEL,(WPARAM)-7864320,0);   //参数三是向下滚动的参数,7864320则为向上滚动
273 数日前收到天影朋友的23种设计模式的例子,很浅显易懂。下面的blog中亦有设计模式的探讨,借古喻今,文笔不错,可供参考:
http://blog.csdn.net/junguo/
274 获得文件夹大小的方法,摘自:http://community.csdn.net/Expert/topic/4672/4672088.xml?temp=.2216761
----------------------------------------------------------------------------------
#include <iostream.h>
#import "scrrun.dll" raw_interfaces_only
int main()
{
CoInitialize(NULL);
{
   try
   {
    Scripting::IFileSystem3Ptr fs;
    fs.CreateInstance(__uuidof(Scripting::FileSystemObject));
    Scripting::IFolderPtr folder;
    fs->GetFolder(_bstr_t("f:\\win98"),&folder);
    _variant_t vsize;folder->get_Size(&vsize);
    cout<<"f:\\win98 size:"<<(long)vsize<<" bytes"<<endl;
   }
   catch(_com_error &e)
   {
   _bstr_t bstrSource(e.Source());
   _bstr_t bstrDescription(e.Description());
   cout<<"Get directory size via FileSystemObject, by masterz"<<endl;
   cout<<"COM error occurred,source:"<<(LPCTSTR)bstrSource<<endl;
   cout<<"Description:"<<(LPCTSTR)bstrDescription<<endl;
   }
}
CoUninitialize();
return 0;
}
----------------------------------------------------------------------------------
275 打开控制台界面,写点文字在上面:
----------------------------------------------------------------------------------
AllocConsole();//打开控制台窗口
HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);//得到控制台句柄
unsigned long lgsize;
char *strbuf="显示这行信息。";
WriteFile(hOutput,strbuf,strlen(strbuf),&lgsize,0);
FreeConsole();//关闭释放用于输入新信息的控制台窗口
----------------------------------------------------------------------------------

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/snow_ice11111/archive/2006/04/10/552696.aspx

你可能感兴趣的:(VC)