BOOL CALLBACK DialogBox1(HWND hDlg,UINT msg,WPARAM wParam, LPARAM lParam)
 { 
 switch(msg)
 { 
 case WM_COMMAND:
 switch(LOWORD(wParam))
 {
      case IDCANCEL:
       EndDialog(hDlg,IDCANCEL);
    break;
 }
 case WM_INITDIALOG:
  Hw=FindWindow(NULL,"ww");
  GetWindowLong(Hw, GWL_WNDPROC);
  { 
 switch(msg)
 { 
 case WM_COMMAND:
 switch(LOWORD(wParam))
 {
      case IDCANCEL:
       EndDialog(hDlg,IDCANCEL);
    break;
 }
 case WM_INITDIALOG:
  Hw=FindWindow(NULL,"ww");
  GetWindowLong(Hw, GWL_WNDPROC);
  SetWindowLong(Hw, GWL_WNDPROC,(LONG)DialogBox1);
  f=GetSystemMenu(Hw,FALSE);
AppendMenu(f, MF_STRING,1, TEXT("关于"));
 break;
 case WM_SYSCOMMAND:
 switch (wParam)
 { case 1:
MessageBox(hDlg,TEXT("加入的关于"),TEXT("aa"),0);
           break;
 }
 
 }
  
return 0;};是不是 SetWindowLong(Hw, GWL_WNDPROC,(LONG)DialogBox1);最后这个参数不对?

解决方案 »

  1.   

    Calling SetWindowLong with the GWL_WNDPROC index creates a subclass of the window class used to create the window. An application can subclass a system class, but should not subclass a window class created by another process. The SetWindowLong function creates the window subclass by changing the window procedure associated with a particular window class, causing the system to call the new window procedure instead of the previous one. An application must pass any messages not processed by the new window procedure to the previous window procedure by calling CallWindowProc. This allows the application to create a chain of window procedures. 
      

  2.   

    不知ww窗口是那个,如果不是和DialogBox1同一进程的话,你是不可以设定它的winproc的
      

  3.   

    ww是别的进程的一个窗口。
    TO   IceboundRock() :你说的有理,但我英语好差,能不能详细些?求求你。