在一个多文档工程中:
1.如何用代码实现关闭当前(或者说最上面)的子窗体?2.如何修改子窗体的caption?3.用系统按纽关闭字窗体,是不是真的销毁了这个子窗体?因为我发现我New了一个以后,然后关闭,发现再New的时候,系统默认的Caption是从...2开始的。谢谢大家!
1.如何用代码实现关闭当前(或者说最上面)的子窗体?2.如何修改子窗体的caption?3.用系统按纽关闭字窗体,是不是真的销毁了这个子窗体?因为我发现我New了一个以后,然后关闭,发现再New的时候,系统默认的Caption是从...2开始的。谢谢大家!
解决方案 »
- 在C**Dlg类中不能添加任何变量 否则窗口无法显示
- VC++菜鸟问题:请说明下这个方法的执行流程;
- VC6如何取64位整数的绝对值?
- 如何在一个FormView里获得另一个FormView的指针
- 用CArray<CStringArray *, CStringArray*> &aData做函数参数有什么问题?
- 100分请教:如何在COM接口中传递SAFEARRAY 参数
- 帮帮winsock初学者,Listen()之后怎样?
- 我现在要编一个DLL,入口函数已经编好了,能使用,现在的问题就是我想变一个出口函数能将一些重要的参数的纸保存下来,作为其他用途,我
- 菜鸟的问题
- 怎样在VB中用API直接打印?
- ctrl+f5正常运行,但是设定断点调试运行时就出错,请教高手是什么原因?
- 怎么在ATL/ActiveX/COM 加入数字签名,请高手指教!
2、SetWindowText
3、系统默认的Caption并不随着子窗体的销毁而改变递增的规律
1. AfxGetApp()->m_pMainWnd->SendMessage()
2. ::DestroyWindow();
.....当然,你也可以用一个进程关闭另外一个进程
....
DWORD dwProcessId;
HANDLE hProcess;
// Find the handle to Calculator’s window (as an example).
HWND hwnd = FindWindow(NULL, “Notepad”);
GetWindowThreadProcessId(hwnd, &dwProcessId);
hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessId);
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
....一顿乱说~! :)
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);但在MainFrm.cpp(多文档中的一个默认cpp),它只默认后面的三个参数;
我如何在MainFrm.cpp中关闭当前的子窗体?是子窗体!
那我如何获得当前(最前面)的子窗体的HWND hChild呢?还有,我如果想改变当前子窗体的"caption",该如何做?谢谢!
访问CWnd::m_hWnd 或用FindWindow
HWND FindWindow(
LPCTSTR lpClassName, // class name
LPCTSTR lpWindowName // window name
);
2.
BOOL SetWindowText(
HWND hWnd, // handle to window or control
LPCTSTR lpString // title or text
);
LPCTSTR lpClassName, // class name
LPCTSTR lpWindowName // window name
);
的参数,从而来关闭该子窗体?谢谢 .HWND hwnd;
hwnd = ::FindWindow(NULL,??); // how to write?
::SendMessage(hwnd,WM_CLOSE,0,0);
hwnd = ::FindWindow(NULL,"your child window's title");
这种方法不太保险,万一另一个窗体的title和你的重名可能就有麻烦了
2。第二种方法
重载子窗体的
PreCreateWindow(CREATESTRUCT& cs)
{
...
//----Register Window Class
static LPCSTR className = NULL;
if (className==NULL)
{
WNDCLASS wndcls;
::GetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wndcls);
wndcls.lpszClassName = "YOUR_CLASSNAME";
VERIFY(AfxRegisterClass(&wndcls));
className="YOUR_CLASSNAME";
}
cs.lpszClass = className;
//----
return TRUE;
}
hwnd = ::FindWindow("YOUR_CLASSNAME",NULL);
3。也可以两个参数一起使用
4。最直接方法,保存你的子窗体的指针
你上面的代码加入以后,编译没有问题,一执行,说是“创建空文档失败”!我的程序是:
一开始用: //InitInstance()
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
{
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
}
屏蔽了子窗体的出现然后用SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,0); 在程序中创建子窗体;在加入你的代码后:
一执行SendMessage创建子窗体,说是“创建空文档失败”!有什么办法解决吗?
问题出现在一执行SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,0); 就出了问题,错误信息:“创建空文档失败”谢谢关注...
CFrameWnd* pMainFrame=(CFrameWnd*)AfxGetMainWnd();
CFrameWnd* pActiveFrame=pMainFrame->GetActiveFrame();
if(pActiveFrame)
pActiveFrame->PostMessage(WM_CLOSE);2:
在CChildFrame中重写CFrameWnd的虚函数OnUpdateFrameTitle:void CChildFrame::OnUpdateFrameTitle(BOOL bAddToTitle)
{
SetWindowText("abc");
}3:
点关闭以后,子窗口的确被销毁了。
有什么方法可以解决你上面方法在应用中出现的问题?谢谢...
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
{
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
}
屏蔽了子窗体的出现去掉上面的代码,启动的时候会出现错误吗?
奇怪...
return FALSE;
{
//加入你的代码...
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}只要在上面加入你的代码,系统就错误(编译通过),别的我什么都没有动过。
错误信息:Debug Assertion Failed! 创建空文档失败!--- 为什么会这样?
{
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
//加入我的代码...
}
不好意思,我刚才试了一下,程序是没有出什么大错,就是没有实现目标(关闭该子窗体)
我的做法:
1. 建立一个多文档工程;
2.
CChildFrame::PreCreateWindow(CREATESTRUCT& cs)下面系统自动生成有
{
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
加入你的的代码...
return true;
}3.
void CAboutDlg::OnOK()
{
HWND hwnd;
hwnd = ::FindWindow("YOUR_CLASSNAME",NULL);
::SendMessage(hwnd,WM_CLOSE,0,0);}结果:没有反应,hwnd 显示为0