MFC修改窗口或者对话框类名实现程序一个实例运行

背景:

笔者做软件的时候,经常遇到的情况是查找另外一个进程,给它发消息。

但是往往FindWindow根据“窗口标题”去查找,比较慢并且有时候还会失败

改成用窗口类名查找,可能比较好。

1、MFC更改对话框类名办法

MFC下更改窗口的默认类名(ClassName)_飞鹤的程序员人生-CSDN博客_窗口类名1. 类名(ClassName)每个能CWnd派生的类,都有一个ClassName,可以通过GetClassName 获取,如对话框的ClassNmae是#32770,按钮的ClassNmae是Button。通过FindWindow,指定className可以更快速地找到相应的窗口句柄。HWND FindWindow( LPCTSTR lpClassName, L...https://blog.csdn.net/feihe0755/article/details/100603779

自定义MFC对话窗口的类名 - 黑月教主 - 博客园默认情况下,MFC对话框的窗口类名为“#32770”,如果想自定义窗口类名呢,需要两步: 1.修改rc文件 这一步需要直接编辑rc文件,使用任意记事本工具即可,找到窗口的相关定义,原来是这样子的: Ihttps://www.cnblogs.com/achillis/p/13504597.html 

2、MFC更改单文档框架类名的办法

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWndEx::PreCreateWindow(cs) )
		return FALSE;
	// TODO: 在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式
    WNDCLASS wndclass;
    ::GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass, &wndclass);
    wndclass.lpszClassName = _T("MyClassName");
    VERIFY(AfxRegisterClass(&wndclass));
    cs.lpszClass = wndclass.lpszClassName;

	return TRUE;
}

3、 一个实例办法

InitIntance函数中加入

 CString strClassName = "MyClassName";
 if(pWndPrev = CWnd::FindWindow(strClassName, NULL)) {
        if(pWndPrev->IsIconic()) {
            pWndPrev->ShowWindow(SW_RESTORE);
            pWndPrev->SetForegroundWindow();
        } else {
            pWndChild = pWndPrev->GetLastActivePopup();
            pWndChild->SetForegroundWindow();
        }
        return FALSE;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值