LRESULT CALLBACK ChildWndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_CREATE:
SetWindowLong(hwnd,0,0);
return 0;
case WM_LBUTTONDOWN:
SetWindowLong(hwnd,0,1^GetWindowLong(hwnd,0));
InvalidateRect(hwnd,NULL,false);
return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
Rectangle(hdc,0,0,rect.right,rect.bottom);
if(GetWindowLong(hwnd,0))
{
MoveToEx(hdc,0,0,NULL);
    LineTo(hdc,rect.right,rect.bottom);
MoveToEx(hdc,0,rect.bottom,NULL);
 LineTo(hdc,rect.bottom,0);
}
EndPaint(hwnd,&ps);
return 0;
}
return DefWindowProc(hwnd,message,wparam,lparam);
}GetWindowLong(hwnd,0)//这句话是什么意思?这里的0可以变码?

解决方案 »

  1.   

    指定要获得值的大于等于0的值的偏移量。有效值的范围从0到额外窗口内存空间的字节数一4例如,若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要获得任意其他值,指定下列值之一:
      GWL_EXSTYLE;获得扩展窗口风格。
      GWL_STYLE:获得窗口风格。
      GWL_WNDPROC:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用CallWindowProc函数调用窗口过程。
      GWL_HINSTANCE:获得应用事例的句柄。
      GWL_HWNDPAAENT:如果父窗口存在,获得父窗口句柄。
      GWL_ID:获得窗口标识。
      GWL_USERDATA:获得与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序使用的32位值。
      在hWnd参数标识了一个对话框时也可用下列值:
      DWL_DLGPROC:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。
      DWL_MSGRESULT:获得在对话框过程中一个消息处理的返回值。
      DWL_USER:获得应用程序私有的额外信息,例如一个句柄或指针。
      

  2.   

    /*
     * Window field offsets for GetWindowLong()
     */
    #define GWL_WNDPROC         (-4)
    #define GWL_HINSTANCE       (-6)
    #define GWL_HWNDPARENT      (-8)
    #define GWL_STYLE           (-16)
    #define GWL_EXSTYLE         (-20)
    #define GWL_USERDATA        (-21)
    #define GWL_ID              (-12)