Vc++ mfc 窗口类名如何修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vc++ mfc 窗口类名如何修改相关的知识,希望对你有一定的参考价值。

1: mfc 属性面板灰色(无法修改类名)
2: 我在 InitInstance 头部函数重定义类名(无效)
/////////////////////////////////////////////////////////////////////////////
窗口运行时根本改不了~~~~~
这要我怎么办~~~~一直看见 #32770 发呆?
假如我是用FindWindow(lpclassname,lptextname);得到HWND,假如窗口的标题,类名和别人一样,我怎么得到HWND?
难道我要使用 this->m_hwnd ?, 要是这样弄,我还有必要用重定类名莫

是要改变对话框标题么?

SetWindowText(HWND,"标题");

如:SetWindowText("追梦");//我是在窗口类中写的,所一省略了串口句柄

同理:

如果你要获取当前窗口的标题可以使用

int GetWindowText(
 HWND hWnd,        // handle to window or control
 LPTSTR lpString,  // text buffer
 int nMaxCount     // maximum number of characters to copy
);
朋友,建议你多多使用MSDN,成为大师,不是问题,如有帮到你,请采纳

追问

呵呵,我是要设置窗口类名
不是设置窗口标题

追答

额,这我还没操作过,抱歉,只是不明白既然已经定义为啥要改它呢

参考技术A 资源编辑器里,点那个对话框,属性那边可以改类名。

但是你要确保创建对话框的时候,窗口类存在(自己用AfxRegisterClass注册一个……
否则对话框应该是出不来的本回答被提问者和网友采纳
参考技术B 窗口类的代码中改啊,.h和.CPP文件中所有涉及类名的地方都改了就行了啊;

MFC中,如何获取一个已知窗口标题的窗口的句柄

如题,比如说我现在打开了一个记事本程序,然后我想获取这个记事本程序的句柄,我该怎么做呢?最好能根据我说的情况举个例子,一个完整的例子,谢过各位了

使用windows API的FindWindow()函数;
函数原型为 :
HWND FindWindow
(
LPCSTR lpClassName,
LPCSTR lpWindowName
);
lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
如果该参数为null时,将会寻找任何与lpWindowName参数匹配的窗口。
lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
返回值:
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。

可作如下使用:
HANDLE hDlg=::FindWindow(NULL,"")
if(hDlg!=NULL)

//Your operations

else

GetLastError();

如果您想熟悉使用API函数,可以下载一个MSDN帮助。里面介绍的是函数的使用方法以及参数的赋值操作
参考技术A FindWindow 查找指定窗口标题的窗口句柄. 得到了他的窗口句柄,就可以继续得到他窗体的子控件句柄. 然后setText 啥的 参考技术B 你用spy++这个工具VC上带的然后取到记事本的窗口名字和类名字

HWND hd=FindWindow("窗口名字","类名字");
if(hd)//这里已经取到
printf("%d\n",hd);
else
printf("error\n");
参考技术C HANDLE m_dlg=::FindWindow(NULL,"图片数据管理服务器");
if (m_dlg!=NULL)

::ShowWindow((HWND)m_dlg,SW_SHOW);
return TRUE;
参考技术D 调用Windows API
EnumWindows就可以枚举所有顶级窗口,所谓顶级窗口就是指没有父窗口的窗口。

函数定义:
BOOL WINAPI EnumWindows(
__in WNDENUMPROC lpEnumFunc,
__in LPARAM lParam
);

第一个参数是回调函数的指针,回调函数必须要是这样的形式
BOOL CALLBACK EnumWindowsProc(
__in HWND hwnd,
__in LPARAM lParam
);

调用EnumWindow之后,你自己的回调函数会被系统调用,没调用你的回调函数一次,他给你一个HWND的句柄,如果你的回调函数返回TRUE,那么系统继续给你下一个窗口的句柄,返回FALSE系统停止枚举窗口。

获得窗口的标题可以通过SendMessage来获得,然后可以对比窗口是否为你需要的窗口。本回答被提问者和网友采纳

以上是关于Vc++ mfc 窗口类名如何修改的主要内容,如果未能解决你的问题,请参考以下文章

如何修改 MFC Dialog 窗体的类名???

VC++ 非 mfc 中的父子窗口问题

VC MFC界面怎么根据桌面分辨率自动设置显示窗口和控件的大小

vc6.0 mfc窗口问题

vc 程序获取管理员权限

我用 Microsoft Visual Studio 2010 新建一个 C++ 的对话框窗口程序的时候 该如何设置它的窗口类名?谢谢!