张国星就是个弱智 2016-06-03 01:19 采纳率: 0%
浏览 1122

windows编程的问题,按照书上敲的代码但是无法运行

#pragma once
#include "engine_system.h"
class cApp :
public cApplication
{
public:
cApp(void);
~cApp(void);
HDC mhDC;
HDC mhMemDC;
BOOL mbIsRun;
BOOL Init();
BOOL Shutdown();
BOOL FRAME();
protected:
LARGE_INTEGER mFrequency;
LARGE_INTEGER mStartCount;
double mFPS;
double mTime;
};

 #include "cApp.h"


cApp::cApp(void)
{
    mbIsRun=TRUE;
    QueryPerformanceFrequency(&mFrequency);
    QueryPerformanceCounter(&mStartCount);
    mTime=0;
}


cApp::~cApp(void)
{
}
BOOL cApp::Init(void)
{
    m_Width=600;m_Height=750;
    Resize(m_Width,m_Height);
    mhDC=GetDC(m_hWnd);
    mhMemDC=CreateCompatibleDC(mhDC);
    HBITMAP hbm=CreateCompatibleBitmap(mhDC,m_Width,m_Height);
    SelectObject(mhMemDC,hbm);
    DeleteObject(hbm);
    SetTextColor(mhMemDC,RGB(255,0,0));
    SetBkMode(mhMemDC,TRANSPARENT);
    return TRUE;
}

BOOL cApp::Shutdown(void)
{
    DeleteDC(mhMemDC);
    ReleaseDC(m_hWnd,mhDC);
    return TRUE;
}
BOOL cApp::FRAME()
{
    HWND hForegroundWindow=GetForegroundWindow();
    BOOL bIsForeground=(m_hWnd==hForegroundWindow);

    static LARGE_INTEGER lastCounter=mStartCount;
    static UINT nCounter=0;
    static BOOL bLastSpaceDown=FALSE;
    BOOL bCurSpaceDown=GetAsyncKeyState(VK_SPACE)&0x8000;
    if(bCurSpaceDown&&(!bLastSpaceDown))
    {
        mbIsRun=!mbIsRun;
    }
    bLastSpaceDown=bCurSpaceDown;
    LARGE_INTEGER currentCounter;
    QueryPerformanceCounter(&currentCounter);
    double deltaTime=(double)(currentCounter.LowPart-lastCounter.LowPart)/mFrequency.LowPart;
    mFPS=1.0/deltaTime;
    lastCounter=currentCounter;
    if((!mbIsRun)||(!bIsForeground))return TRUE;
    mTime+=deltaTime;
    static TCHAR temp[100];
    _stprintf(temp,L"Current FPS:%d,Average FPS:%d,TIME:%d",(UINT)mFPS,(UINT)((double)++nCounter/mTime),(UINT)mTime);
    PatBlt(mhMemDC,0,0,m_Width,m_Height,WHITENESS);
    TextOut(mhMemDC,0,0,temp,_tcslen(temp));

    BitBlt(mhDC,0,0,m_Width,m_Height,mhMemDC,0,0,SRCCOPY);
    if(GetAsyncKeyState(VK_ESCAPE)&0x8000)
    {
        return FALSE;
    }
    return TRUE;
}

#include
#include

class cApplication
{
protected:
HINSTANCE m_hInst;
HWND m_hWnd;

TCHAR m_Class[MAX_PATH];
TCHAR m_Caption[MAX_PATH];

WNDCLASSEX m_wcex;
DWORD m_Style;
DWORD m_XPos,m_YPos;
DWORD m_Width,m_Height;

public:
cApplication();
HWND GethWnd();
HINSTANCE GethInst();
BOOL Run();
BOOL Resize(long Width,long Height);
virtual BOOL Init(){return TRUE;}
virtual BOOL Shutdown(){return TRUE;}
virtual BOOL FRAME(){return TRUE;}
};
static cApplication *g_pApplication=NULL;
static long _stdcall AppWindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

#include"Engine_System.h"
#include<Windows.h>
cApplication::cApplication()
{
    g_pApplication=this;
    m_hInst=GetModuleHandle(NULL);
    _tcscpy(m_Class,L"AppClass");
    _tcscpy(m_Caption,L"Application Caption");
    m_Style=WS_OVERLAPPEDWINDOW;
    m_XPos=0;
    m_YPos=0;
    m_Width=640;
    m_Height=480;
    m_wcex.cbSize=sizeof(WNDCLASSEX);
    m_wcex.style=CS_CLASSDC;
    m_wcex.lpfnWndProc=AppWindowProc;
    m_wcex.cbClsExtra=0;
    m_wcex.cbWndExtra=0;
    m_wcex.hInstance=m_hInst;
    m_wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    m_wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
    m_wcex.hbrBackground=HBRUSH(COLOR_WINDOW);
    m_wcex.lpszMenuName=NULL;
    m_wcex.lpszClassName=m_Class;
}
HWND cApplication::GethWnd()
{
    return m_hWnd;
}
HINSTANCE cApplication::GethInst()
{
    return m_hInst;
}
BOOL cApplication::Run()
{
    MSG msg;
    if(!RegisterClassEx(&m_wcex))return FALSE;
    m_hWnd=CreateWindow(m_Class,m_Caption,m_Style,m_XPos,m_YPos,m_Width,m_Height,NULL,NULL,m_hInst,NULL);
    if(!m_hWnd)return FALSE;
    Resize(m_Width,m_Height);
    ShowWindow(m_hWnd,SW_NORMAL);
    UpdateWindow(m_hWnd);
    Init();
        ZeroMemory(&msg,sizeof(MSG));
        while(msg.message!=WM_QUIT)
        {
            if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
                if(FRAME()==FALSE)break;
            }
        }

    Shutdown();
    UnregisterClass(m_Class,m_hInst);
    return TRUE;
}
BOOL cApplication::Resize(long Width,long Height)
{
    int xFrame=GetSystemMetrics(SM_CXSIZEFRAME);
    int yFrame=GetSystemMetrics(SM_CYSIZEFRAME);
    int yCaption=GetSystemMetrics(SM_CYCAPTION);
    int xScreen=GetSystemMetrics(SM_CXSCREEN);
    int yScreen=GetSystemMetrics(SM_CYSCREEN);

    int cx=xFrame*2+xFrame+Width;
    int cy=yFrame*2+yCaption+Height+yFrame;
    SetWindowPos(m_hWnd,HWND_TOP,(xScreen-cx)/2,(yScreen-cy)/2,cx,cy,SWP_SHOWWINDOW);
    return TRUE;
}
long _stdcall AppWindowProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch(msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    default:
        return DefWindowProc(hWnd,msg,wParam,lParam);
    }
}


#include"cApp.h"
#include
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPTSTR lpCmdLine,int nCmdShow)
{
cApp app;
app.Run();
}



  • 写回答

1条回答 默认 最新

  • threenewbee 2016-06-03 02:31
    关注

    建议你看《深入浅出MFC》,其中有详细介绍怎么模拟mfc来封装api函数成类。

    评论

报告相同问题?

悬赏问题

  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题