请问一个窗口过程是对应一个窗口还是对应一类窗口(使用同一个窗口类创建的)?窗口过程函数
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
里面的hwnd指的是哪个窗口句柄,如何使用这个句柄?
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
里面的hwnd指的是哪个窗口句柄,如何使用这个句柄?
解决方案 »
- 发什么消息能调用对话框中的OnOK();和OnCancel();?
- 关于ACTIVEX控件在本地应用程序中注册的问题。。。。。
- 请教一个关于CDib类指针的问题。
- 请问双击CTreeCtrl节点,通过输入改变它的名字
- 关于CListenSocket的小问题!满烦大家了!嘿嘿!
- 关于连接dll的问题
- 关于CDialog类和WM_CHAR消息
- 为什么我在企业管理器内无法删除数据
- 不知是不是菜鸟问题:在VC中如何打开CHM文件
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 有关HTML中视频的问题:img标签的loopdealy属性及embed的src="..\"
- 求助,谁帮编译一份Liunx下写的源码
- 求答案:c++程序设计教程
=============
是对应一类窗口。里面的hwnd指的是哪个窗口句柄,如何使用这个句柄?
============
hwnd是指收到消息的窗口,对于很多操作窗口的API来说,这个hwnd都是必须的参数。
HWND hwnd, //handle to the window不同的窗口的hwnd 不同,回调函数的地址也不同多个窗口调用统一个,操作系统会 为每个窗口调用自己的窗口过程
写两个WndProc 不就完了么
WindowProc1
WindowProc2
那么你就
HWND h1,h2WndPRoc(HWND h...)
{
case WM_..
if(h = h1)
..
if(h == h2)
..
}
#include<windows.h>
#include<tchar.h>
//窗口类名和窗口标题
TCHAR szWindowClass[]=_T("HELLOWINDOWS");
TCHAR szWindowTitle1[]=_T("This is the MAIN window");
TCHAR szWindowTitle2[]=_T("Test");HWND g_hWnd1;
HWND g_hWnd2;
//窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
//LogMessage(logfile,msg,wParam,lParam);//
if(hWnd == g_hWnd1)
{
switch(msg)
{
case WM_DESTROY:
MessageBox(hWnd,"OK!Window1",NULL,0);
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
}
else if(hWnd == g_hWnd2)
{
switch(msg)
{
case WM_DESTROY:
MessageBox(hWnd,"OK!Window1",NULL,0);
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
}
}int WINAPI _tWinMain( HINSTANCE hInstance,HINSTANCE,LPTSTR lpCmdLine,int nCmdShow)
{
//注册窗口类
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = NULL;
RegisterClassEx(&wcex);
//创建主窗口
HWND hWnd1 = CreateWindowEx(0,szWindowClass, szWindowTitle1, WS_OVERLAPPEDWINDOW,
128, 96, 512, 480, HWND_DESKTOP, NULL, hInstance, NULL);
if (!hWnd1)
return FALSE;
g_hWnd1 = hWnd1;
HWND hWnd2 = CreateWindowEx(0,szWindowClass, szWindowTitle2, WS_OVERLAPPEDWINDOW,
128, 96, 512, 480, HWND_DESKTOP, NULL, hInstance, NULL);
if (!hWnd2)
return FALSE;
g_hWnd2 = hWnd2;
//显示并更新主窗口
ShowWindow(hWnd1,nCmdShow);
UpdateWindow(hWnd1); ShowWindow(hWnd2,nCmdShow);
UpdateWindow(hWnd2);
// 进入消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
//程序退出
}
MessageBox(hWnd,"OK!Window1",NULL,0);
你的两个消息都弹出的这个, 你怎么判断, 你把 hwnd = ghwnd2 换一下弹出字符串
你的程序只启动了一个进程,PostQuitMessage是给当前的进程发送消息,结束当前进程。当然退出了。
你可以销毁一个窗口不就完了.
你可以DestoryWindow(hwnd)销毁一个指定窗口啊.
两个窗口属于一个进程,就好象你开VS 或者 VC 6.0 ,退出的时候退出的是整个进程,所有附属窗口也关闭了。