通俗基础教程
电脑操作教程
电脑怎样拨号上网
如何做个人网页
怎样做局域网
Word教程(文字处理)
图形图象处理入门
经典提高教程
怎样使用代理服务器
如何做无盘工作站
Photoshop教程
Dreamweaver3教程
Flash4&5教程
Firework3教程
Frontpage2000教程
Authware教程
Office2000教程
如何制作动画图片
OICQ&ICQ使用方法

高手学习指南

硬件升级技巧
CGI教程
ASP教程

PHP教程

注册表使用技巧
路由器的设置
网站建设指南
SQL
最近更新:
Flash
相关内容

Visual C++编程小技巧之九

68. VC1.5下如何跳到第一事例?

69. 为什么VC++2.0中使用文件对话框会死机?

70. 在VC++1.5中如何new一个大数组?

71. 在VC1.5中,如何得到子窗口在主窗口中的相对坐标?

72. VC1.5 如何调用进程?

73. VC++1.5编Win3.1程序能否实现全局跳转?

74. 如何在DLL用自定义窗口?

75. 如何让TOOLTIP的字体变大?

 

68.VC1.5下如何跳到第一事例?

各位大虾: CWinApp::InitInstance()中可知是第二事例,但如何在return FALSE;

之前FindWindow()到第一事例呢? 主要困难是:

1).主窗口类名可否得到 ( 主窗口==MainFrame ? 若是,怎知MainFrame类名?

2).Title因含有文档名, 是一不确定串.

1. 类名是动态的,所以应该不易得到。(不知是否如此?)

类名不是动态的,如果不作处理, MFC 总是使用 AfxFrameOrView 为类名,

只有 MainFrame, 和 View 等等才会用 AfxFrameOrView,

我刚用 spy 看了我的一个程序,主窗口的Class 为 Afx:b:13ce:6:3be7

至于如何注册自己定义的类,我还没有学会,望高手指教。

AfxRegisterWndClass()

2. 我用的方法是只查Title中前半部分和你的要求串一致即可,忽略后面的文档?

FindWindow() 函数需要给定窗口类名和窗口标题(Title),不知你是怎样做到只查前半部分的?

用EnumWindows()一个窗口一个窗口查,不能用 FindWindow()

这里我有另外一个问题:

找到第一事例的窗口后,如何激活它,使它成为当前窗口?

极小状态时,才能把它激活出来,否则也是没有动静,不知何故?

if (IsIconic(hwndMain))

ShowWindow(hwndMain, SW_RESTORE);

else

SetActiveWindow(hwndMain);

 

69.关于VC++2.0中使用文件对话框的求助

在VC++2.0中使用了标准文件对话框以后,编译联接都能正常通过,而且使用Ctrl+F5执行EXE文件也完全正常,但是一旦用F5调试进入, 使用该对话框的代码时,Win95就会异常中止,请问各位高手,为什么?

文件对话框,改变了执行程序的当前路径,从而干扰了调试系统。如果是为了调试,可以使文件对话框定位在当前目录,并且运行时不要在其中改变目录。

 

70.如何用VC2.0编写能Edit超过64K的类

我要用 VC2.0 编写一个 Editor, 要求能编辑超过 64K 的文本.我的 Edit 类从 CEdit 类派生出来 , 但编辑超过 64K 的文本就显示不出来. 原知道在 VC1.5 中 CEdit 类只能编辑小于 64K 的文本,不知 VC2.0 是否也一样?

.

自己从CWnd类派生,管理内存、输入、显示等(其实不累)。至于从CEdit中派生,我也没有头绪。

VC2.0会有这事?我没试过,但我不相信。VC2.0是运行在Win95或WindowsNT 上的开发工具,是Win32的开发工具。Windows 95及NT对应用程序在内存上没有段的限制,应用程序最多可利用高达4G的内存(包括系统占用)。你所说的限制大概是VC1.5的限制吧。盖因VC1.5运行于Win16上,每个段不能超过64K。

的确如此,VC2.0 有两个例子 samples\mfc\multipad 和 samples\mfc\superpad 也是如此。不信你看看。

 

71.在VC++1.5中如何new一个大数组

我想在用VC++1.5编程时,new一个[512][512]的大数组,却总是不行.

哪位专家可以指点一下.

选用Larger and Huger模式的库编译

我用过Large模式,好象不行呀!我用Huge模式,头文件编译时就出错了!

VC++ 1.5 毕竟是16的, 512*512 是多少?做链表好了否则就用VC++2.0, 全32位就不该有这问题了

这样的做法并不十分好,要分配如此大的内存最好用全局的内存分配函数.直接用指针操作,效率也会提高.

用MFC类不行吗?如CObArray

请用GlobalAllocPtr和GlobalFreePtr这一对函数,如下:

DWORD dwSize ;;

hpsStr =(char huge *)GlobalAllocPtr( GMEM_MOVEABLE , dwSize ) ;

...

GlobalFreePtr( hpsStr ) ;

不管多大数组,都保证没有问题。

在VC1.5中,如何得到子窗口在主窗口中的相对坐标?

比较笨的方法是先ClientToScreen转成屏幕坐标,然后ScreenToClient转成主窗口坐标,不知有没有更方便的方法.

MapWindowPoints(hwndChild, hwndParent, (POINT FAR *)lprc, 2)lprc 设成子窗口内的坐标(0,0, width, height)

 

72.VC1.5 如何调用进程?

我用VC1.52编Windows程序,中间想执行一个其他Windows应用程序,并且让我的程序挂起等应用程序执行完后再继续,请问如何实现?

exec( ) 和 spawn( )与Windows不兼容,所以它们肯定不行了.

WinExec()

挂起的一个简单方法是得到新进程的主窗口句柄,然后进入死循环,直到此句柄变为无效。

不知道还有什么更漂亮一些的手法。

请问,怎么得到进程的主窗口句柄呢?

是呀,我也正想问呢.例如我执行的是PSpice for Windows.用WinExec()

可以如下:

int nWinRun = WinExec("wpspice test.cir", SW_SHOWNORMAL);

可是如何得到新进程的主窗口句柄呢?能不能截取新进程的消息呢

紧接着用 GetActiveWindow() 就可以.

当然还是在win3.1 下才有用....

win95 下由于有输入的局部化问题,所以只能得到本线程的Activate Window或Focus Window,对于其他情况返回都是NULL.这问题还是不知道怎么办,alas...

所 以 最 根 本 的 办 法 是 如 何 读 写 Windows 消 息 总 库 .

哪 位 高 手 看 得 懂 SPY 的 源 程 序 (在 C++ 或 Delphi 之 类 的 Sample 中 有 ).

Use "FindWindow()". according to window title, get window handle.

then use Window Declassing method. that is write your own procedure

to process the message you want to capture. "CallWindowProc() is

executed before DefWindowProc()". (sorry can not type chinese now.)

我在Vc 4.0 下用_exec, _spawn, 以及WinExec都没问题的!

 

73.VC++1.5编Win3.1程序能否实现全局跳转?

setjmp即可,和DOS下一样。

用Windows API 中的 Catch() 和 Throw() 可能会更好些。不过我也不知道和setjmp有些什么区别。

setjmp 恐怕不行, 它好象只能用来编写 C 程序,而不能用来编写 C++ 程序!

我的感觉是,只要是代码段,可以不受函数和应用的限制,随便乱跳的。其实是数据段,也可以跳过去的。换句话说,在WINDOW中,可以跳到任何地方,只要我乐意。

 

74.在DLL用自定义窗口

我在DLL中用如下窗口,

class CMyWin:public CWnd

{

public:

CMyWin() ;

} ;

CMyWin::CMyWin()

{

if( !CreateEx( WS_EX_TOPMOST ,

AfxRegisterWndClass( CS_SAVEBITS ) ,

"mywin" , WS_POPUP ,

0 , 0 , 100 , 100 , NULL , NULL ) )

AfxMessageBox( "CreateEx error" ) ;

}

请问有谁知道是什么原因?谁在DLL中做过类似工作,望赐教。ror”,

我记得AfxRegisterWndClass好象应该在PreCreateWindow中调用,

在构造函数中用这个函数似乎有问题,你再试试吧!

用C++作DLL可以吗?好象名字分裂回有些负作用吧?

用MFC C++是可以做传统的DLL的。只要将回调函数定义成如下格式就行了:

#ifdef __cplusplus

extern "C" {

#endif

void __export FAR PASCAL fun() ;

#ifdef __cplusplus

}

#endif

其它与普通MFC程序一样。当然,在例程类的定义上也有点特别的地方

我如果在正常的执行程序中这样用CreateEx就没有任何问题,而在DLL中

就有问题。并且这问题也只发生在WIN3.1上,在WIN95上却可以正常执行。

-

75.如何让TOOLTIP的字体变大

前几天有个虫虫问如何让vc4.0的Tooltip的字体变大,可现在文章没有了.不过现在我

有个方法:在Windows 95 Desktop 属性中有desktop scheme中有Tooltip一项,可以该变

TOOLTIP的字体和大小.不过这样做所有程序的Tooltip都变大了.这可能不是你的本意.

但Tooltip是Windows 95 Common Control,由Windows

95内部实现,VC4.0的CTooltip类并不实现Tips的显示,所以要实现针对某个程序的

Tooltip的特殊显示,有一定难度.我以前曾经试图实现Tooltip的多行显示,做到了当Toolt.

显示时触发我的函数,消失时触发我的函数,但在显示时却出GP错误.现在我认为最简

单的方法是从头自己实现Tooltip类.一切随心所欲.*

用VB实现多文件查找与替换功能
用VB 5.0 设计Browser及FTP程序
用Visual Basic 5.0设计E-mail程序
谈谈WIN API在VB中的应用
在VB中使用Word的“艺术字”工具
获取Win95特殊目录准确路径
VC技巧一
VC19问
VC技巧5则
Visual C++编程技巧之一
Visual C++编程技巧之2
Visual C++编程技巧之3
Visual C++编程技巧之四
Visual C++编程技巧之五
Visual C++编程技巧之六
Visual C++编程技巧之七
Visual C++编程技巧之八
Visual C++编程小技巧之九
 
 
 
 
 
 
 
 
教程站
收集整理



月光软件源码下载编程文档电脑教程网站优化网址导航网络文学游戏天地生活休闲写作范文安妮宝贝站内搜索
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有