不用管我,我只是没有地方放,放在这里的。。
/*------------------------------------------------- CHECKER4.C -- Mouse Hit-Test Demo Program No. 4 (c) Charles Petzold, 1998 -------------------------------------------------*/ #include <windows.h> #include<stdio.h> #define DIVISIONS 5 //static str = TEXT("退出消息循环") ; static str1 = TEXT("得焦点信息") ; static str2 = TEXT("鼠标按下") ; static str3 = TEXT("重绘") ; static str4 = TEXT("创建") ; static str5 = TEXT("键盘") ; static str6 = TEXT("失去焦点信息") ; static str7 = TEXT("窗口大小") ; LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; LRESULT CALLBACK ChildWndProc (HWND, UINT, WPARAM, LPARAM) ; int idFocus = 0 ; TCHAR szChildClass[] = TEXT ("Checker4_Child") ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Checker4") ; 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 ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("Program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } wndclass.lpfnWndProc = ChildWndProc ; wndclass.cbWndExtra = sizeof (long) ; wndclass.hIcon = NULL ; wndclass.lpszClassName = szChildClass ; RegisterClass (&wndclass) ; hwnd = CreateWindow (szAppName, TEXT ("Checker4 Mouse Hit-Test Demo"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndChild[DIVISIONS][DIVISIONS] ; int cxBlock, cyBlock, x, y ; FILE *fp ; fp = fopen("A.txt","a+") ; switch (message) { case WM_CREATE : fprintf(fp,"主%s,%ld\n",str4,GetMessageTime()) ; //显示主创建的信息 for (x = 0 ; x < DIVISIONS ; x++) for (y = 0 ; y < DIVISIONS ; y++) hwndChild[x][y] = CreateWindow (szChildClass, NULL, WS_CHILDWINDOW | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) (y << 8 | x), (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL) ; fprintf(fp,"主%s之后,%ld\n",str4,GetMessageTime()) ; //判断此信息有没有被中断处理 return 0 ; case WM_SIZE : fprintf(fp,"主%s,%ld\n",str7,GetMessageTime()) ; //主窗口大小 cxBlock = LOWORD (lParam) / DIVISIONS ; cyBlock = HIWORD (lParam) / DIVISIONS ; for (x = 0 ; x < DIVISIONS ; x++) for (y = 0 ; y < DIVISIONS ; y++) MoveWindow (hwndChild[x][y], x * cxBlock, y * cyBlock, cxBlock, cyBlock, TRUE) ; return 0 ; case WM_LBUTTONDOWN : fprintf(fp,"主%s,%ld\n",str2,GetMessageTime()) ; //主窗口鼠标单击消息 MessageBeep (0) ; return 0 ; // On set-focus message, set focus to child window case WM_SETFOCUS: fprintf(fp,"主%s,%ld\n",str1,GetMessageTime()) ; //主窗口获得焦点的消息 SetFocus (GetDlgItem (hwnd, idFocus)) ; //这里会返回主窗口的句柄 fprintf(fp,"主%s后,%ld\n",str1,GetMessageTime()) ; //主窗口获得焦点的消息 return 0 ; // On key-down message, possibly change the focus window case WM_KEYDOWN: x = idFocus & 0xFF ; y = idFocus >> 8 ; switch (wParam) { case VK_UP: y-- ; break ; case VK_DOWN: y++ ; break ; case VK_LEFT: x-- ; break ; case VK_RIGHT: x++ ; break ; case VK_HOME: x = y = 0 ; break ; case VK_END: x = y = DIVISIONS - 1 ; break ; default: return 0 ; } x = (x + DIVISIONS) % DIVISIONS ; y = (y + DIVISIONS) % DIVISIONS ; idFocus = y << 8 | x ; fprintf(fp,"主%s前,%ld\n",str5,GetMessageTime()) ; //主窗口按键消息前 SetFocus (GetDlgItem (hwnd, idFocus)) ; fprintf(fp,"主%s后,%ld\n",str5,GetMessageTime()) ; //主窗口按键消息后,为的是查看是否被中断 return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } // fprintf(fp,"主%s,%ld\n",str,GetMessageTime()) ; //主窗口退出循环消息 fclose(fp) ; return DefWindowProc (hwnd, message, wParam, lParam) ; } LRESULT CALLBACK ChildWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { FILE *fp ; HDC hdc ; PAINTSTRUCT ps ; RECT rect ; fp = fopen("A.txt","a+") ; if(fp == NULL) { MessageBox(hwnd,TEXT("ERROR"),TEXT("wrong"),MB_OK) ; } switch (message) { case WM_CREATE : fprintf(fp,"子%s前,%ld\n",str4,GetMessageTime()) ; //子窗口创建前 SetWindowLong (hwnd, 0, 0) ; // on/off flag fprintf(fp,"子%s后,%ld\n",str4,GetMessageTime()) ; //子窗口创建后 return 0 ; case WM_KEYDOWN: // Send most key presses to the parent window fprintf(fp,"子%s前,%ld\n",str5,GetMessageTime()) ; //子窗口按键前 if (wParam != VK_RETURN && wParam != VK_SPACE) { SendMessage (GetParent (hwnd), message, wParam, lParam) ; fprintf(fp,"子%s后,%ld\n",str5,GetMessageTime()) ; //子窗口按键后 return 0 ; } // For Return and Space, fall through to toggle the square case WM_LBUTTONDOWN : fprintf(fp,"子%s前,%ld\n",str2,GetMessageTime()) ; //子窗口击键前 SetWindowLong (hwnd, 0, 1 ^ GetWindowLong (hwnd, 0)) ; SetFocus (hwnd) ; fprintf(fp,"子%s后,%ld\n",str2,GetMessageTime()) ; //检查SetFocus的作用 InvalidateRect (hwnd, NULL, FALSE) ; return 0 ; // For focus messages, invalidate the window for repaint case WM_SETFOCUS: fprintf(fp,"子%s,%ld\n",str1,GetMessageTime()) ; //子窗口获得焦点 idFocus = GetWindowLong (hwnd, GWL_ID) ; // Fall through case WM_KILLFOCUS: fprintf(fp,"子%s,%ld\n",str6,GetMessageTime()) ; //子窗口失去焦点消息 InvalidateRect (hwnd, NULL, TRUE) ; fprintf(fp,"子%s后,%ld\n",str6,GetMessageTime()) ; //子窗口失去焦点消息后 return 0 ; case WM_PAINT : fprintf(fp,"子%s,%ld\n",str3,GetMessageTime()) ; //子窗口绘图消息 hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; Rectangle (hdc, 0, 0, rect.right, rect.bottom) ; // Draw the "x" mark if (GetWindowLong (hwnd, 0)) { MoveToEx (hdc, 0, 0, NULL) ; LineTo (hdc, rect.right, rect.bottom) ; MoveToEx (hdc, 0, rect.bottom, NULL) ; LineTo (hdc, rect.right, 0) ; } // Draw the "focus" rectangle if (hwnd == GetFocus ()) { rect.left += rect.right / 10 ; rect.right -= rect.left ; rect.top += rect.bottom / 10 ; rect.bottom -= rect.top ; SelectObject (hdc, GetStockObject (NULL_BRUSH)) ; SelectObject (hdc, CreatePen (PS_DASH, 0, 0)) ; Rectangle (hdc, rect.left, rect.top, rect.right, rect.bottom) ; DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))) ; } EndPaint (hwnd, &ps) ; return 0 ; } fclose(fp) ; return DefWindowProc (hwnd, message, wParam, lParam) ; }