基于同一个窗口类(只有类名不同),在同一段代码中,我创建了两个窗口
两个窗口共用同一个回调函数这样,我在创建窗口完成后,我用两种方式设置了一个定时器
1、定时器于两个窗口都无关,设置了一个TimerProc()过程函数来处理
2、定时器与其中一个窗口相关,并在其窗口过程中加入了WM_TIMER响应为了验证定时器是否起作用,我在TimerProc()和WM_TIMER 中都加入了 MessageBox()但是,以上两种方式,MessageBox 都没有弹出来。这是个SDK程序
以下是代码
// Test6.cpp : Defines the entry point for the application.
//#include "stdafx.h"#define ID_TIMER 1HWND hWnd1;
HWND hWnd2;PCHAR szClass1 = "SourceWindow";
PCHAR szClass2 = "DestWindow";//窗口过程 与 定时器过程
LRESULT CALLBACK WinProc2(HWND hWnd,UINT Msg,WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
VOID CALLBACK TimerProc(HWND, UINT , UINT , DWORD );
 
int WINAPI WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here. WNDCLASSEX wndClass;
wndClass.cbSize = sizeof(WNDCLASSEX); wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW +1);
wndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndClass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
wndClass.hInstance = hInstance;
wndClass.hInstance =hInstance;
wndClass.lpfnWndProc = WinProc;
wndClass.lpszClassName = szClass1;
wndClass.lpszMenuName = NULL;
wndClass.style = 0; if(!RegisterClassEx(&wndClass))
{
MessageBox(NULL,"Register Class1 Failed!","Error!",MB_OK);
return FALSE;
} hWnd1 = CreateWindowEx(0,szClass1,"Source Window",WS_OVERLAPPEDWINDOW, 600,0,500,500,NULL,NULL,hInstance,NULL);
if(!hWnd1)
{
MessageBox(NULL,"Create Source Window Failed!","Error!",MB_OK); LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,
GetLastError(),0,(LPTSTR) &lpMsgBuf,0, NULL );

MessageBox(hWnd1,(LPCSTR)lpMsgBuf,"error",MB_OK);
return FALSE;
}
ShowWindow(hWnd1,nCmdShow);
UpdateWindow(hWnd1); wndClass.lpszClassName = szClass2;
wndClass.lpfnWndProc = WinProc2;
if(!RegisterClassEx(&wndClass))
{
MessageBox(NULL,"Register Class2 Failed!","Error!",MB_OK);
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,
GetLastError(),0,(LPTSTR) &lpMsgBuf,0, NULL );

MessageBox(hWnd1,(LPCSTR)lpMsgBuf,"error",MB_OK);
return FALSE;
} hWnd2 = CreateWindow(szClass2,"DestWindow",WS_OVERLAPPEDWINDOW, 0,0,500,500,NULL,NULL,hInstance,NULL);
if(!hWnd2)
{
MessageBox(NULL,"Create Dest Window Failed!","Error!",MB_OK);
return FALSE;
}

ShowWindow(hWnd2,nCmdShow);
UpdateWindow(hWnd2); //设置时钟
int hTimer = SetTimer(NULL,ID_TIMER,1000,(TIMERPROC)TimerProc);
// SetTimer(NULL,ID_TIMER,1000,TimerProc); MSG Msg; while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}// KillTimer(NULL,ID_TIMER);
KillTimer(NULL,hTimer); return 0;
}LRESULT CALLBACK WinProc(HWND hWnd,UINT Msg,WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
RECT rect;
HDC hdc;
switch(Msg)
{
case WM_CLOSE:
PostQuitMessage(0);
DestroyWindow(hWnd);
break;
case WM_PAINT:
if(hWnd == hWnd1)
{
hdc = BeginPaint(hWnd1,&ps);
GetClientRect(hWnd1,&rect);
DrawText(hdc,"Hello,how are you?",-1,&rect,DT_CENTER);
EndPaint(hWnd1,&ps);
}
break;
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK WinProc2(HWND hWnd,UINT Msg,WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
RECT rect;
HDC hdc;
HDC hdc1;
HDC hdc2;
HDC hMem;
RECT rect1;
RECT rect2;
HBITMAP hBitmap;
switch(Msg)
{
/*
hdc1 = GetDC(hWnd1);
hdc2 = GetDC(hWnd2);
GetClientRect(hWnd1,&rect1);
GetClientRect(hWnd2,&rect2); hMem = CreateCompatibleDC(hdc1);
// hBitmap = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1));
// HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMem,hBitmap);
BitBlt(hdc2,rect2.left,rect2.top,(rect2.right-rect2.left),(rect2.top-rect2.bottom),
hdc1,rect1.left,rect1.top,SRCCOPY);
ReleaseDC(hWnd1,hdc1);
ReleaseDC(hWnd2,hdc2);
break;*/ case WM_CLOSE:
PostQuitMessage(0);
DestroyWindow(hWnd);
break;
case WM_PAINT:
if(hWnd == hWnd2)
{
hdc = BeginPaint(hWnd2,&ps);
GetClientRect(hWnd2,&rect);
DrawText(hdc,"Hello,how are?",-1,&rect,DT_CENTER);
EndPaint(hWnd2,&ps);
}
break; default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0;
}VOID CALLBACK TimerProc(HWND hWnd, UINT msg, UINT idEvent, DWORD dwTime)
{
MessageBox(NULL,"jfke","",MB_OK);
/* HDC hdc1;
HDC hdc2;
HDC hMem;
RECT rect1;
RECT rect2;
HBITMAP hBitmap;
hdc1 = GetDC(hWnd1);
hdc2 = GetDC(hWnd2);
GetClientRect(hWnd1,&rect1);
GetClientRect(hWnd2,&rect2);// hMem = CreateCompatibleDC(hdc1);
// hBitmap = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1));
// HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMem,hBitmap);
BitBlt(hdc2,0,0,(rect2.right-rect2.left),(rect2.bottom-rect2.top),
hdc1,0,0,SRCCOPY);
ReleaseDC(hWnd1,hdc1);
ReleaseDC(hWnd2,hdc2); InvalidateRect(hWnd2,&rect2,TRUE);*/
}