游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2472|回复: 4

百思不得其解的GDI问题,高手帮忙!

[复制链接]

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2005-3-2 23:45:00 | 显示全部楼层 |阅读模式
以下代码在公司的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;
}

0

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2005-3-3 00:33:00 | 显示全部楼层

Re:百思不得其解的GDI问题,高手帮忙!

应该响应WM_PAINT消息并进行画图。

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-3-3 00:48:00 | 显示全部楼层

Re:百思不得其解的GDI问题,高手帮忙!

但问题是同样的代码在公司的WIN2000下可以正常显示图片啊,而且用FOR循环来绘图应该也可以的吧

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-3-4 22:09:00 | 显示全部楼层

Re:百思不得其解的GDI问题,高手帮忙!

难道没人知道吗?继续顶

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-3-4 22:12:00 | 显示全部楼层

Re:百思不得其解的GDI问题,高手帮忙!

啊,问题已解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 10:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表