|
|
以下代码在公司的WIN2000下编译通过并正常显示图片,但在我家的WINXP下去是黑屏,按ESC可以正常退出,高手看看问题出在哪里
#include <windows.h>
HWND hWnd;
MSG msg;
BOOL bStart=FALSE;
HDC hdc,hdcMem;
short iWidth,iHeight,iMove=100;
HBITMAP hBmp;
BITMAP bmp;
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_KEYDOWN://击键消息
switch( wParam )
{
case VK_ESCAPE:
//MessageBox(hWnd,"ESC键按下了! 确定后退出!","Keyboard",MB_OK);
PostMessage(hWnd, WM_CLOSE, 0, 0);//给窗口发送WM_CLOSE消息
break;
}
return 0; //处理完一个消息后返回0
case WM_CLOSE: //准备退出
DestroyWindow( hWnd ); //释放窗口
return 0;
case WM_DESTROY: //如果窗口被人释放…
PostQuitMessage( 0 ); //给窗口发送WM_QUIT消息
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
static void InitWindow( HINSTANCE hInstance, int nCmdShow )
{
//定义窗口风格:
WNDCLASS wc;
wc.style = NULL;
wc.lpfnWndProc = WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = CreateSolidBrush (RGB(0, 0, 0)); //黑色的背景
wc.lpszMenuName = NULL;
wc.lpszClassName = "My_Test";
RegisterClass(&wc);//注册窗口
//按所给参数创造窗口
iWidth = GetSystemMetrics( SM_CXSCREEN ); //此函数返回屏幕宽度
iHeight = GetSystemMetrics( SM_CYSCREEN ); //此函数返回屏幕高度
hWnd = CreateWindow("My_Test","My first program",WS_POPUP|WS_MAXIMIZE,0,0,iWidth,iHeight,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);//显示窗口
UpdateWindow(hWnd);//刷新窗口
}
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
InitWindow(hInstance, nCmdShow);
hBmp = (HBITMAP): oadImage(NULL,"eye.bmp",IMAGE_BITMAP,20,5,LR_LOADFROMFILE|LR_CREATEDIBSECTION );
GetObject(hBmp, sizeof(BITMAP), &bmp);
hdc = GetDC(hWnd);
hdcMem = CreateCompatibleDC (hdc);
SelectObject(hdcMem, hBmp);
for(;;)
{
if(PeekMessage (&msg, NULL, 0, 0,PM_REMOVE))
{
if(msg.message == WM_QUIT)
break;
TranslateMessage (&msg);
DispatchMessage (&msg);
}
else
{
StretchBlt(hdc,100,100,200,200,hdcMem,0,0,5,5,MERGECOPY);
}
}
DeleteDC(hdcMem);
DeleteObject(hBmp);
ReleaseDC(hWnd,hdc);
return 0;
} |
|