荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: VC FAQ(1)
发信站: BBS 荔园晨风站 (Tue Jan 26 22:49:11 1999), 转信

------------------------------------------------- ----------------
概览∶

11. VC1.5下如何跳到第一事例?
12. 为什么VC++2.0中使用文件对话框会死机?
13. 在VC++1.5中如何new一个大数组?
14. 在VC1.5中,如何得到子窗口在主窗口中的相对坐标?
15. VC1.5 如何调用进程?
16. VC++1.5编Win3.1程序能否实现全局跳转?
17. 如何在DLL用自定义窗口?
18. 如何让TOOLTIP的字体变大?


------------------------------------------------------------------------
发信人: maq@SMTH ('ma:kju:), 信区: Program
标  题: Re: VC1.5下如何跳到第一事例?

>  ==> xbl (xbl) 提到:
>  >     各位大虾: CWinApp::InitInstance()中可知是第二事例,但如何在return
>  FALSE;
>  > 之前FindWindow()到第一事例呢? 主要困难是:
>  >     1).主窗口类名可否得到 ( 主窗口==MainFrame ? 若是,怎知MainFrame类
名?
>  >     2).Title因含有文档名, 是一不确定串.

==> maq@SMTH ('ma:kju:) 提到:
>  > 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);

------------------------------------------------------------------------------.

发信人: maq@SMTH ('ma:kju:), 信区: Program
标  题: Re: 关于VC++2.0中使用文件对话框的求助

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

文件对话框,改变了执行程序的当前路径,从而干扰了调试系统。

如果是为了调试,可以使文件对话框定位在当前目录,并且运行时

不要在其中改变目录。
------------------------------------------------------------------------------.

发信人: Cliff (KK), 信区: Program
标  题: 如何用VC2.0编写能Edit超过64K的类

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

   .
====> 发信人: Tintori (落寞狂徒 信区: Program

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

===> 发信人: midi (迷笛), 信区: Program

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

===> 发信人: Cliff (KK), 信区: Program

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

---------------------------------------------------------------------------

发信人: bearcat (熊猫), 信区: Program
标  题: 在VC++1.5中如何new一个大数组

我想在用VC++1.5编程时,new一个[512][512]的大数组,却总是不行.
哪位专家可以指点一下.

====> 发信人: netbug (我在笑傲江湖), 信区: Program
选用Larger and Huger模式的库编译

====> 发信人: bearcat@SMTH (熊猫), 信区: Program
我用过Large模式,好象不行呀!
我用Huge模式,头文件编译时就出错了!

====> 发信人: logitech (mousenet), 信区: Program
VC++ 1.5 毕竟是16的, 512*512 是多少?
做链表好了
否则就用VC++2.0, 全32位就不该有这问题了

====> 发信人: sorrow (伤心小箭), 信区: Program
        这样的做法并不十分好,要分配如此大的内存最好用全局的内存分配函数.
        直接用指针操作,效率也会提高.

====> 发信人: yingwu@SMTH (天马行空), 信区: Program

用MFC类不行吗?如CObArray

====> 发信人: walklooktalk@SMTH (走走看看说说), 信区: Program

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

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

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

------------------------------------------------------------------------------.

发信人: lisa@SMTH (西瓜王子), 信区: Program
标  题: [转贴] VC1.5 求教

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

====> 发信人: walklooktalk@SMTH (走走看看说说), 信区: Program

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

====> 发信人: ming@SMTH (明明), 信区: Program
MapWindowPoints(hwndChild, hwndParent, (POINT FAR *)lprc, 2)
lprc 设成子窗口内的坐标(0,0, width, height)

------------------------------------------------------------------------------.

-
发信人: Zhaoly@SMTH (晖城太守), 信区: Program
标  题: VC1.5 如何调用进程?

        我用VC1.52编Windows程序,中间想执行一个其他Windows应用
    程序,并且让我的程序挂起等应用程序执行完后再继续,请问如何
    实现?
        exec( ) 和 spawn( )与Windows不兼容,所以它们肯定不行了.
====> 发信人: ming@SMTH (明明), 信区: Program
WinExec()
挂起的一个简单方法是得到新进程的主窗口句柄,然后进入死循环,
直到此句柄变为无效。
不知道还有什么更漂亮一些的手法。

====> 发信人: walklooktalk@SMTH (走走看看说说), 信区: Program
==> ming@SMTH (明明) 提到:
请问,怎么得到进程的主窗口句柄呢?

====> 发信人: Zhaoly@SMTH (晖城太守), 信区: Program
是呀,我也正想问呢.例如我执行的是PSpice for Windows.用WinExec()
可以如下:
        int nWinRun = WinExec("wpspice test.cir", SW_SHOWNORMAL);

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

====> 发信人: ming@SMTH (明明), 信区: Program
紧接着用 GetActiveWindow() 就可以.
当然还是在win3.1 下才有用....
win95 下由于有输入的局部化问题,所以只能得到本线程的Activate Window
或Focus Window,对于其他情况返回都是NULL.
这问题还是不知道怎么办,alas...

====> 发信人: IcerFay@SMTH (Zero), 信区: Program
所 以 最 根 本 的 办 法 是 如 何 读 写 Windows 消 息 总 库 .
哪 位 高 手 看 得 懂 SPY 的 源 程 序 (在 C++ 或 Delphi 之 类 的 Sample 中
有 ).

====>发信人: playboy@SMTH (challenger), 信区: Program
标  题: Re: VC1.5 如何调用进程?
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.)

====>发信人: vampire@SMTH (吸血迷情), 信区: Program
我在Vc 4.0 下用_exec, _spawn, 以及WinExec都没问题的!

------------------------------------------------------------------------------.

---
发信人: Zhaoly@SMTH (晖城太守), 信区: Program
标  题: VC++1.5编Win3.1程序能否实现全局跳转?

====> 发信人: eagles@SMTH (群鹰烩), 信区: Program
setjmp即可,和DOS下一样。

====>发信人: ming@SMTH (明明), 信区: Program
用Windows API 中的 Catch() 和 Throw() 可能会更好些。
不过我也不知道和setjmp有些什么区别。

====>发信人: Zhaoly@SMTH (晖城太守), 信区: Program
   setjmp 恐怕不行, 它好象只能用来编写 C 程序,而不能用来编写 C++ 程序!

====>发信人: walklooktalk@SMTH (走走看看说说), 信区: Program
我的感觉是,只要是代码段,可以不受函数和应用的限制,
随便乱跳的。
其实是数据段,也可以跳过去的。
换句话说,在WINDOW中,可以跳到任何地方,只要我乐意。
------------------------------------------------------------------------------.

---
发信人: walklooktalk@SMTH (走走看看说说), 信区: Program
标  题: 在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”,

====> 发信人: BlueStar@SMTH (BlueStar,重出江湖!), 信区: Program
        我记得AfxRegisterWndClass好象应该在PreCreateWindow中调用,
        在构造函数中用这个函数似乎有问题,你再试试吧!

====> 发信人: w95@SMTH (西瓜胖胖), 信区: Program
        用C++作DLL可以吗?好象名字分裂回有些负作用吧?

====> 发信人: walklooktalk@SMTH (走走看看说说), 信区: Program

用MFC C++是可以做传统的DLL的。只要将回调函数定义成如下格式就行了:
#ifdef  __cplusplus
extern "C" {
#endif
void __export FAR PASCAL fun() ;
#ifdef __cplusplus
}
#endif
其它与普通MFC程序一样。当然,在例程类的定义上也有点特别的地方
我如果在正常的执行程序中这样用CreateEx就没有任何问题,而在DLL中
就有问题。并且这问题也只发生在WIN3.1上,在WIN95上却可以正常执行。

------------------------------------------------------------------------------.

-
发信人: zhangdh@SMTH (Tree), 信区: Program
标  题: 如何让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类.一切随心所欲.窢


--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店