VisualC++编程技巧,第1张

VisualC++编程技巧,第2张

1.如何获取应用的实例句柄?

应用程序的实例句柄保存在CWinAppIm_hInstance中,所以可以调用
AFXGETINSTANCHANDLE来获取句柄。
示例:handleh instance = AFXGETINSTANCEHANDLE();

2.如何通过代码获取应用程序主窗口的指针?

主窗口的指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd。
AfxGetMainWnd()-> show window(SW _ SHOWMAXMIZED);//已编程。

3.如何在程序中获取其他程序的图标

两种方法:
(1) SDK函数SHGetFileInfo或者使用ExtractIcon获取图标资源的句柄,
(2) SDK函数SHGetFileInfo获取文件的很多信息,比如大小图标,属性,类型等。
例(1):记事本图标显示在程序窗口的左上角。
Void C sample view:ONDRAW(CDC * PDC)
{
If(::shgetFileInfo(_ t(" C:\ \ PWIN)
& stFileInfo,sizeof(stFileInfo),SHGFI _ ICON))
{
PDC-> draw ICON(10,10,stFileInfo . hicon);
}
}
例(2):同一个函数,使用提取图标函数
void CSAMPLEVIEW::ONDRAW(CDC * PDC)
{
hIcon hIcon =::提取图标
if (hIcon &&hIcon!=(HICON)-1)
pDC-> draw icon(10,10,HICON);
}
注意:获取notepad.exe的路径通常是使用GetWindowsDirectory函数获取的。如果
调用win95下的画笔,应该是通过访问注册表获得的。要做出更优雅的工艺
,要综合考虑。

4.如何编写终端应用程序?如何编程控制windows的重启?

这是编程中经常遇到的一个很简单的问题。
首先向窗口发送一个WM_CLOSE消息,调用CWnd::OnClose成员函数。允许提示用户
是否保存修改后的数据。
示例:AFXGetMainWindow()--> SendMessage(WM _ CLOSE)
还可以创建自定义函数termin ate Window
void termin ate Window(LPC str p caption)
{
cwnd * pwnd = cwnd::FindWindow(null,p caption);
if(pWnd)
pWnd-> SendMessage(WM _ CLOSE);
}
说明:不建议使用FindWindow函数,因为它不能处理标题栏的自动变化。比如我们想
在事先不知道记事本标题栏的情况下,检查记事本是否在运行,那么FindWindow什么都做不了
,可以通过枚举windows任务列表来实现。机械出版社出版的《Windows 95
API开发人员指南》一书中有详细介绍,这里就不说了。
第二个问题,使用ExitWindowsEx函数函数是否控制系统重启或重启windows。
之前有人讲过,我就不再提了。

5.如何添加其他应用?

我记得这好像是一个出现频率很高的问题。
可以使用WinExec、ShellExecute和CreateProcess三个SDK函数。
WinExec最简单,有两个参数,前一个指定路径,后一个指定显示方式。后一个参数值得一提
。比如用SW_SHOWMAXMIZED方法添加一个没有按钮的程序,呵呵就是
Neterm,calc等。,标准形式将不会出现,但它已被添加到。
ShellExecute比WinExex灵活一点,可以指定工作目录。下面的例子是直接打开
c:\temp.txt,不添加与txt文件关联的应用程序。许多安装程序会打开
一个窗口来显示自述文件或常见问题。我想我就是这么做的。
shellexecute (null,null,_ t ("1.txt "),null,_ t ("c: \ \ temp "),SW _ show max mixed);
CreateProcess是最复杂的。总共有十个参数,但是大部分都可以用NULL代替。它可以指定
进程的安全属性、继承信息、类优先级等等。我们来看一个非常简单的例子:
startup info stinfo;//启动窗口的信息
process info proc info;//进程
createprocess的信息(null,_ t ("notepad.exe "),null,null.false,normal _ priority _
class,null,null,& stinfo,& proc info);

6.确定应用程序的路径。

前几天好像有人问过这个问题。
使用GetModuleFileName获取应用程序的路径,然后删除可执行文件名称。
示例:
TCHAR exeFullPath[MAX _ PATH];// MAX_PATH是在API中定义的,好像是128
getModuleFilename(null,exefullpath,MAX_PATH)

7.获取各种目录信息

Windows目录:使用“getwindows directory”
Windows下的系统目录:使用“getsystem directory”
Temp目录:使用“GetTempPath”
当前目录:使用“GetCurrentDirectory”
请注意,前两个函数的第一个参数是目录变量名,最后一个与后两个相反。

8.如何自定义消息?

有人问过,其实不难。
(1)手动定义消息,可以写# define WM _ my _ message(WM _ USER+100),MS推荐的最小值是WM _ USER+100;
(2)编写消息处理函数,使用wparam和lparam返回lresult。
lresult cmainframe::on my message(WPARAM WPARAM,LPARAM LPARAM)
{
/加入您的处理函数
}。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VisualC++编程技巧

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情