windows是用什么区分不同程序的同名窗口类的?(50分)

  • 主题发起人 主题发起人 lps
  • 开始时间 开始时间
L

lps

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是典型的windows程序,但我们的lpszClassName应该可以和别的程序一样,windows
怎么处理这个问题?
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin")
HWND hwnd
MSG msg
WNDCLASS wndclass
wndclass.style = CS_HREDRAW | CS_VREDRAW
wndclass.lpfnWndProc = WndProc
wndclass.cbClsExtra = 0
wndclass.cbWndExtra = 0
wndclass.hInstance = hInstance
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION)
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW)
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH)
wndclass.lpszMenuName = NULL
[red]wndclass.lpszClassName = szAppName [/red]
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR)
return 0
}
hwnd = CreateWindow (szAppName, // window class name
TEXT ("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) // creation parameters

ShowWindow (hwnd, iCmdShow)
UpdateWindow (hwnd)

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg)
DispatchMessage (&msg)
}
return msg.wParam
}
 
通过窗口句柄hwnd啊
 
是问窗口类,不是说窗口
 
两个不同进程,窗口类是可以同名的。根据不同进程区分不同的窗口。
例如:两个人允许相同的名字,但区分他们的是不同的背景和经历,他们存在不同的空间中。
 
to gangfeng
能详细一点吗?
 
刚想到下面这句,hInstance肯定是不一样的,不知是不是用它区分的??
wndclass.hInstance = hInstance
 
HInstance 在 win32 中无用。
wndclass 相同,窗口行为即相同。区分窗口,按 Atom 进行。
 
进程有自己的ID,窗口也有自己的Hwnd,实际上他们都指向了一个结构体,是指针!
 
进程的ID是不同的
 
有全局窗口类和进程局部窗口类,局部窗口类名当然是可以重复的.每
个进程都有自己的ProcessID
 
楼主将这句 wndclass.lpszClassName = szAppName 标上红色是否表示windows
就是根据这个来创建不同类型的窗口的,比如要建立的是BUTTON或者是FORM??
我看了上面的代码感觉可能就是根据这个来判别的!!
 
同一个类被引用时,Atom 加一,并使用 VirtualQuery 确定这个实例的内存位置,使它
和 CreateWindow 取得的 hwnd 关联起来,同时,通过 GetModuleFileName 取得和这个
hwnd 关联的可执行文件名。
 
听说在WIN16下是不能区分的(我没试过),
而在WIN32下每个程序都有自已的一片天地,当然同名可以了。
 
多人接受答案了。
 
后退
顶部