大家帮我看看这段代码哪错了!谢谢!回复有效果必给分!
#include "stdafx.h"
#include "DrawChess.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 唯一的应用程序对象
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
}
//-------------------------------------------------------
HWND hDesktop = GetDesktopWindow();
CWnd *pWnd = CWnd::FromHandle(hDesktop);
CDC m_dcMemory;
CDC *pView=pWnd->GetDC();
LPRECT lpRect=0;
GetWindowRect(hDesktop, lpRect);
//pWnd->GetClientRect (lpRect);
//pView->FillSolidRect(&rt,0x00FFFFFF);
m_dcMemory.FillSolidRect(lpRect,0x00FFFFFF);//内存中用白色清除上一次的内容
m_dcMemory.Rectangle(18,18,422,422);
m_dcMemory.Rectangle(20,20,420,420);
for(int j=0;j<20;j++)
{
m_dcMemory.MoveTo(20,20+20*j);
m_dcMemory.LineTo(420,20+20*j);
m_dcMemory.MoveTo(20+20*j,20);
m_dcMemory.LineTo(20+20*j,420);
}
pView->BitBlt(0,0,(lpRect->right -lpRect->left ),(lpRect->bottom -lpRect->top ),&m_dcMemory,0,0,SRCCOPY);
pWnd->ReleaseDC(pView);
return nRetCode;
}
调试成功,可是运行出错,提示“.exe出错,遇到问题需要关闭。我们对此引起的有便表示抱歉”
[解决办法]
LPRECT lpRect=0;
没有分配内存
建议改为
CRect rect;
LPRECT lpRect=▭
[解决办法]
LPRECT lpRect=0;
GetWindowRect(hDesktop, lpRect);
改为:
RECT Rect;
GetWindowRect(hDesktop, &Rect);
后面用到的地方也做相应修改
[解决办法]
LPRECT lpRect=0;
LPRECT 是指针,在内存地址为0的地方做动作,程序必崩溃,这也算是一种保护手段
[解决办法]
LPRECT lpRect=0;引起的内存泄漏