⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 系统.htm

📁 VC的一些技巧性文档
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html><style type="text/css"><!--.p9 {  font-family: "宋体"; font-size: 9pt}a        {text-transform: none; text-decoration: none;}a:hover {text-decoration: underline; color: #FF0000;}--></style><body background="di2001.jpg"><h3 align="center"><font COLOR="#AOAO99">系统</font></h3><table width="100%"><tr><td><font color="0000FF"><a name="1">检查TP(技术预览)<Br>Kate Gregory	翻译:Yu Hail</a></font></td></tr><tr><td><p></Br>微软为VC开发者发布了"TP(技术预览)",它有如下特点:<Br></Br>支持动态主页,因此你的应用程序也能是一个浏览器提供类似于IE4的控件,包括新的工具条,网络地址控件和改进的主机控件. 支持OLE数据库应用程序可以包含ActiveX文档的(预览版只能建立服务器ActiveX文档)你可以下载预览版的TP(大约30M),或者定购CD. 提前使用新的控件,掌握OLE数据库,将网络结合到你的应用程序之中. http://www.microsoft.com/visualc/techmat/techpreview.htm.<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="2">减少VC++编译时链接的时间 <Br>Jim Marshall	翻译:Yu Hail</a></font></td></tr><tr><td><p></Br>使用VC++ 5.0时,我发现VC++5.0在链接应用程序时花费了大量的时间. VC++ 4.X就很快,尤其是设置增量链接时(调试模式下默认开关). 通过查找说明文件(VCREAD.HTM),我找到如下说明:<Br></Br>"使用开关/OPT:ICF减少链接时间<Br>开关/OPT:ICF[,iterations] 去掉了相同COMDAT记录,来减少应用程序的大小. iteration的值设置了搜索相同COMDAT记录的次数. 如果指定了/OPT:REF,那么也就默认指定了/OPT:ICF,除非你指定/OPT:NOICCF.<Br>因此给链接器加上开关/OPT:NOICF,能够加快链接的速度. 当然结果是增加了应用程序的字节数. 因此我总是在调试模式中打开此开关,而在发行模式中关掉它.<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="3">使用资源编辑器<Br>Mark Davis	翻译:Yu Hail</a></font></td></tr><tr><td><p></Br>下面是一些使用资源编辑器的技巧.<Br></Br>多个控件: 按住Ctrl键,然后单击对话框编辑器中的多个控件,这样,你就可以同进复制多个控件了.<Br></Br>&nbsp;使用子类控件: 在对话框编辑器中使用子类控件,要先放置一个基类控制的实例,然后产生所要子类控件的成员变量.<Br></Br>&nbsp;从其它文件中抓取资源: 查看或使用包含在*.OCX,*.DLL或者*.EXE文件中的资源,只需要打开它们. 要在项目中包含某个资源,只要将它拖放到资源浏览器中即可.<Br></Br>从你的位图中获取工具条资源: VC++ 4.X能够自动地将位图转换为工具条资源.只要打开已存在的位图资源,然后从图象菜单中选择工具编辑器即可,按下OK键就可以把位图资源转换为工具条资源.<Br></Br>使用模板: 有一个简单的方法创建基于属性页和对话条的对话框.选择Insert… 资源(或者在右击资源浏览器时插入),展开对话框目录,使用某个预定义的对话框模板.<Br></Br>注册自已的模板: 你可以生成一个基于VB表单的对话框模板.选择插入…资源,按下导入, 然后选择文件形式为*.FRM(VB表单).<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="4">生成自定义的关键字 <Br>Doug Mair	翻译:Yu Hail</a></font></td></tr><tr><td><p></Br>你知不知道可以在微软的Developer Studio中生成自定义的关键字表? 那些词都作为着重强调,就象保留字一样.你甚至可以指定颜色. 如下所示:<Br></Br>将你的关键字加入到文件USERTYPE.DAT中,此文件和MSDEV.EXE在同一个目录中. 每个词都要占一行,也就是说,一行一个关键字.<Br>为你的关键字指定颜色,在开发环境中菜单工具… 选项对话框中, 你会看到有一格式项.选择目录"Source Window",然后在颜色列表中选择 "用户自定义关键字". 在这里你可以指定颜色,字体和大小.<Br>要使改动生效,你必须重起开发环境.<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="5">发行模式的问题<Br>Scot Wingo	翻译:Yu Hail</a></font></td></tr><tr><td><p></Br>当从调试模式转到发行模式时,产生问题可能是以下的原因:<Br></Br>未初始化变量. 在MSVC1.5x中,调试模式的编译器将所有创建的变量初值都置0.而在发行模式,他们则是未知的.这是最大的问题.但在后续版本中可能没有这个问题吧.<Br></Br>当要VERIFY时你使用了ASSERT. 这可以通过在STDAFX.H中加上 #define ASSERT VERIFY 来验证.如果起作用了,你就能找到问题所在.<Br></Br>编译器优化错误. 这些错误并不常见,但它们的确存在.关掉所有的优化措施来判断问题是不是出在这儿.<Br></Br>速度问题. 如果应用程序反应迟钝,那可能是在调试模式中运行太慢. 换句话说,是在发行版本中运行太快,以至于来不及刷新屏幕所致. 检查UpdateWindow()函数.<Br></Br>另:你可以在发行模式中包含调试信息,然后来调试看看问题出在哪.<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="6">如何获取应用程序的实例句柄? </a></font></td></tr><tr><td><p></Br>应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用<Br></Br>AfxGetInstancdHandle获得句柄.<Br></Br>Example: HANDLE hInstance=AfxGetInstanceHandle();<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="7">如何在程序中获得其他程序的图标? </a></font></td></tr><tr><td><p></Br>两种方法:<Br></Br>(1) SDK函数 SHGetFileInfo 或使用 ExtractIcon获得图标资源的 handle,<Br></Br>(2) SDK函数 SHGetFileInfo获得有关文件的很多信息,如大小图标,属性,类型等.<Br></Br>Example(1): 在程序窗口左上角显示 NotePad图标.<Br></Br>void CSampleView: OnDraw(CDC * pDC)<Br></Br>{<Br></Br>if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0,<Br></Br>&stFileInfo,sizeof(stFileInfo),SHGFI_ICON))<Br></Br>{<Br></Br>pDC ->DrawIcon(10,10,stFileInfo.hIcon);<Br></Br>}<Br></Br>}<Br></Br>Example(2):同样功能,Use ExtractIcon Function<Br></Br>void CSampleView:: OnDraw(CDC *pDC)<Br></Br>{<Br></Br>HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T<Br></Br>("NotePad.exe"),0);<Br></Br>if (hIcon &&hIcon!=(HICON)-1)<Br></Br>pDC->DrawIcon(10,10,hIcon);<Br></Br>}<Br></Br>说明: 获得notepad.exe的路径正规上来说用GetWindowsDirectory 函数得到,如果是调用 win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程序,考虑应该全面点.<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="8">怎样加载其他的应用程序? </a></font></td></tr><tr><td><p></Br>我记得这好象是出场频度很高的问题。<Br></Br>三个SDK函数 winexec, shellexecute,createprocess可以使用。<Br></Br>WinExec最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说一下,比如泥用 SW_SHOWMAXMIZED方式去加载一个无最大化按钮的程序,呵呵就是Neterm,calc等等,就不会出现正常的窗体,但是已经被加到任务列表里了。ShellExecute较 WinExex灵活一点,可以指定工作目录,下面的 Example就是直接打开 c:\temp\1.txt,而不用加载与 txt文件关联的应用程序,很多安装程序完成后都会打开一个窗口,来显示Readme or Faq,偶猜就是这么作的啦.<Br></Br>ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED);<Br></Br>CreateProcess最复杂,一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等.来看个很简单的 Example:<Br></Br>STARTUPINFO stinfo; //启动窗口的信息<Br></Br>PROCESSINFO procinfo; //进程的信息<Br></Br>CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_<Br></Br>CLASS,NULL,NULL, &stinfo,&procinfo);<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="9">如何自定义消息 </a></font></td></tr><tr><td><p></Br>也有人问过的,其实不难。<Br></Br>(1) 手工定义消息,可以这么写 #define WM_MY_MESSAGE(WM_USER+100),<Br></Br>MS 推荐的至少是 WM_USER+100;<Br></Br>(2)写消息处理函数,用 WPARAM,LPARAM返回LRESULT.<Br></Br>LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam)<Br></Br>{<Br></Br>//加入你的处理函数<Br></Br>}<Br></Br>(3) 在类的 AFX_MSG处进行声明,也就是常说的"宏映射"<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="10">如何获取一个对话控件的指针 </a></font></td></tr><tr><td><p></Br>有两种方法。其一,调用CWnd: : GetDlgItem,获取一个CWnd*指针调用成员函数。下例调用GetDlgItem,将返回值传给一个CSpinButtonCtrl*以便调用CSpinButtonCtrl : : SetPos 函数:<Br></Br>BOOL CSampleDialog : : OnInitDialog ( )<Br></Br>{<Br></Br>CDialog : : OnInitDialog ( ) ;<Br></Br>//Get pointer to spin button .<Br></Br>CSpinButtonCtrl * pSpin - ( CSpinButtonCtrl *) GetDlgItem (IDC_SPIN) ;<Br></Br>ASSERT _ VALID (pSpin) ;<Br></Br>//Set spin button's default position .<Br></Br>pSpin —> SetPos (10) ;<Br></Br>return TRUE ;<Br></Br>}<Br></Br>其二, 可以使用ClassWizard将控件和成员变量联系起来。在ClassWizard中简单地选择Member Variables标签,然后选择Add Variable …按钮。如果在对话资源编辑器中,按下Ctrl键并双击控件即可转到Add Member Variable对话。<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="11">如何访问预定义的GDI对象 </a></font></td></tr><tr><td><p></Br>可以通过调用CDC:: SlectStockObject使用Windows的几个预定义的对象,诸如刷子、笔以及字体。下例使用了Windows预定义的笔和刷子GDI对象在视窗中画一个椭圆。<Br></Br>//Draw ellipse using stock black pen and gray brush.<Br></Br>void CSampleView:: OnDraw (CDC* pDC)<Br></Br>{<Br></Br>//Determine size of view.<Br></Br>CRect rcView;<Br></Br>GetClientRect (rcView);<Br></Br>//Use stock black pen and stock gray brush to draw ellipse.<Br></Br>pDC->SelectStockObject (BLACK_PEN);<Br></Br>pDC->SelectStockObject (GRAY_BRUSH)<Br></Br>//Draw the ellipse.<Br></Br>pDC->Ellipse (reView);<Br></Br>}<Br></Br>也可以调用新的SDK函数GetSysColorBrush获取一个系统颜色刷子,下例用背景色在视窗中画一个椭圆:<Br></Br>void CsampleView:: OnDraw (CDC* pDC)<Br></Br>{<Br></Br>//Determine size of view.<Br></Br>CRect rcView;<Br></Br>GetClientRect (rcView);<Br></Br>//Use background color for tooltips brush.<Br></Br>CBrush * pOrgBrush=pDC->SelectObject (<Br></Br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -