请问一个窗口过程是对应一个窗口还是对应一类窗口(使用同一个窗口类创建的)?窗口过程函数
LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);
里面的hwnd指的是哪个窗口句柄,如何使用这个句柄?

解决方案 »

  1.   

    请问一个窗口过程是对应一个窗口还是对应一类窗口(使用同一个窗口类创建的)?
    =============
    是对应一类窗口。里面的hwnd指的是哪个窗口句柄,如何使用这个句柄?
    ============
    hwnd是指收到消息的窗口,对于很多操作窗口的API来说,这个hwnd都是必须的参数。
      

  2.   

    To:wltg2001如果创建两个窗口共享一个窗口过程,那么如何区分开对获得的消息进行不同的处理呢?就是说如果两个窗口对同一个消息处理方式不同,那怎么做。
      

  3.   

    To crosoli :在哪里判断?你是说在窗口过程里判断吗?
      

  4.   

    WindowProc(
      HWND hwnd,    //handle to the window不同的窗口的hwnd 不同,回调函数的地址也不同多个窗口调用统一个,操作系统会 为每个窗口调用自己的窗口过程
      

  5.   

    To wangbo56916860 :你的意思且不就是每个窗口有一个窗口过程嘛!我现在想对两个窗口进行不同的处理(对同一种消息),这窗口过程如何写呢?
      

  6.   


    写两个WndProc 不就完了么 
    WindowProc1
    WindowProc2
      

  7.   

    两个窗口公用一个窗口过程,那么过程函数地址也是不一样的啊,如果你能保证两个窗口函数的地址一样
    那么你就
    HWND h1,h2WndPRoc(HWND h...)
    {
     case WM_..
       if(h = h1)
        ..
      if(h == h2)
        ..
    }
      

  8.   


    #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;
    //程序退出
    }
      

  9.   

    我创建了一个文件 用了以下 你是看的弹出的字符串是么?  
     MessageBox(hWnd,"OK!Window1",NULL,0);
    你的两个消息都弹出的这个, 你怎么判断, 你把 hwnd = ghwnd2 换一下弹出字符串
      

  10.   

    大哥哥:
    你的程序只启动了一个进程,PostQuitMessage是给当前的进程发送消息,结束当前进程。当然退出了。
    你可以销毁一个窗口不就完了.
    你可以DestoryWindow(hwnd)销毁一个指定窗口啊.
    两个窗口属于一个进程,就好象你开VS 或者 VC 6.0 ,退出的时候退出的是整个进程,所有附属窗口也关闭了。