两个问题,应该很简单的,可我不会(200分)

M

mllee

Unregistered / Unconfirmed
GUEST, unregistred user!
1、运行时改变窗口标题
我想显示一个窗口并改变一其标题,试了N种办法,结果都不行:
CMyDlg dlg;
char *s = "New Caption";
SendMessage(dlg.m_hWnd, WM_SETTEXT, 0, (LPARAM)s);
//这句无效
SetWindowText(dlg.m_hWnd, s); //这句也无效
dlg.SetWindowText(s); //这句运行时出错
dlg.DoModal();
但在dlg类的成员函数中,这三条语句都是有效的。
后来我又在CMyDlg类中加了个SetCaption方法,然后调用它
dlg.SetCaption(s)
结果还是运行时出错,郁闷死了。究竟应该怎样改变窗口的标题呢?
2、全局变量
如果想使用全局变量(当然这样做不很理想),应该在什么地方声明它?
我把它声明在了一个头文件中,然后在几个文件中分别include了它,结果链接时被告知,改
变量已经存在了。
应该怎么办呢?
 
1.form->caption是不是.
 
对不起,没看见是VC++版的问题,//俺不知道.
 
把dlg类的头文件包含进来
 
2、头文件必须用 extern int c 这样(用extern)
然后在其中一个cpp文件(必须是一个cpp,不能多,不能少)写 int c
 
1、先create再设置再DoModal?
 
1:肯定会出错的,因为你哪里只创建对话框类,对话框实际上并没有被创建.先要显示出来,
再SetWindowText,如果是DoModal就在InitDialog里面Set,是Show就在后面Set.
2:使用全局变量时,首先在变量声明时加上extern,然后在需要用的地方再extern声明一下.
 
1.同意热血。
2.你的问题
[red]2、全局变量
如果想使用全局变量(当然这样做不很理想),应该在什么地方声明它?
我把它声明在了一个头文件中,然后在几个文件中分别include了它,结果链接时被告知,改
变量已经存在了。[/red]

你的声明指的是什么?
一般在一个程序文本文件中定义全局变量。如 int g_iVal=10;
然后在在其他任意地方声明extern int g_iVal即可。
但是一般还是应该将声明放在一个头文件中为好,这样,多个程序文本文件(cpp)可以
通过包含头文件使用这个全局变量了。
 
第二个问题可能是头文件中没有定义
#ifndef __TOOL_H__
#define __TOOL_H__
//全局变量定义
#endif
这类的宏引起的。
 
1. 你要改变的是窗口还是对话框. window 还是 dialog??
2 加入 #program once
 
1.把SetWindowText放在OnInitialDlg中使用;
2.把该变量放到该应用程序类中定义一个Public的变量MyVariable。然后,在程序的任何地方,
你都可以用下面的方法来访问该变量:
CMyApp *app = (CMyApp *)AfxGetApp();
app->MyVariable = ...
 
对不起,忘了散分了
 
顶部