首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

大家帮小弟我看看这段代码哪错了!多谢!回复有效果必给分

2012-01-15 
大家帮我看看这段代码哪错了!谢谢!回复有效果必给分!#include stdafx.h#include DrawChess.h#ifdef _D

大家帮我看看这段代码哪错了!谢谢!回复有效果必给分!
#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=&rect;
[解决办法]
LPRECT lpRect=0;
GetWindowRect(hDesktop, lpRect);
改为:
RECT Rect;
GetWindowRect(hDesktop, &Rect);
后面用到的地方也做相应修改

[解决办法]
LPRECT lpRect=0;
LPRECT 是指针,在内存地址为0的地方做动作,程序必崩溃,这也算是一种保护手段
[解决办法]
LPRECT lpRect=0;引起的内存泄漏

热点排行