大家看一下,这个绘图程序有什么问题?

tnds 2003-11-25 08:45:27
想法是:选择字体后,绘制一个内切于窗口的椭圆,椭圆中按指定字体显示字,可现在程序运行后只谈出字体对话框,不绘图,大家看一下怎么回事?
void CEx08View::OnPaint()
{
CPaintDC dc(this); // device context for painting
CPen MyPen,*OldPen;
MyPen.CreatePen(PS_SOLID,10,RGB(255,100,100));
OldPen=dc.SelectObject(&MyPen);
LOGFONT lfont;
COLORREF tcolor;
CFont myfont;
CFontDialog fd;
if (fd.DoModal())
{
fd.GetCurrentFont(&lfont);
tcolor=fd.GetColor();
}
myfont.CreateFontIndirect(&lfont);
CRect rect(100,100,540,380);
CBrush MyBrush(HS_CROSS,RGB(0,0,255));
dc.Ellipse(rect);
dc.SetTextColor(tcolor);
dc.SetBkMode(TRANSPARENT);
dc.DrawText("ÍÛ£¡ÎÒ°®VC",&rect,DT_CENTER);
dc.SelectObject(OldPen);
// TODO: Add your message handler code here

// Do not call CView::OnPaint() for painting messages
}
...全文
106 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tnds 2003-11-25
  • 打赏
  • 举报
回复
各位看一下,我修改过的代码全文
但是运行时出现“Debug Asserstion Invaild"什么的,而且怎么画内切于窗口的椭圆啊?
/ Ex08View.cpp : implementation of the CEx08View class
//

#include "stdafx.h"
#include "Ex08.h"
#include "stdio.h"

#include "Ex08Doc.h"
#include "Ex08View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
LOGFONT lfont;
COLORREF tcolor;
CFontDialog fd;
CFont myfont,*pOldFont;


/////////////////////////////////////////////////////////////////////////////
// CEx08View

IMPLEMENT_DYNCREATE(CEx08View, CView)

BEGIN_MESSAGE_MAP(CEx08View, CView)
//{{AFX_MSG_MAP(CEx08View)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEx08View construction/destruction

CEx08View::CEx08View()
{
// TODO: add construction code here
m_bPen=true;
m_bLine=false;
m_bRect=false;
m_bCircle=false;
m_bPattern=false;
}

CEx08View::~CEx08View()
{
}

BOOL CEx08View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CEx08View drawing

void CEx08View::OnDraw(CDC* pDC)
{
CEx08Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
}

/////////////////////////////////////////////////////////////////////////////
// CEx08View printing

BOOL CEx08View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}

void CEx08View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}

void CEx08View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CEx08View diagnostics

#ifdef _DEBUG
void CEx08View::AssertValid() const
{
CView::AssertValid();
}

void CEx08View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CEx08Doc* CEx08View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEx08Doc)));
return (CEx08Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CEx08View message handlers




void CEx08View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (fd.DoModal())
{
fd.GetCurrentFont(&lfont);
tcolor=fd.GetColor();
}
// dc.TextOut(point.x,point.y,buff,strlen(buff));
// CView::OnLButtonDown(nFlags, point);

}

void CEx08View::OnPaint()
{
CPaintDC dc(this); // device context for painting
CPen MyPen,*OldPen;
MyPen.CreatePen(PS_SOLID,10,RGB(255,100,100));
OldPen=dc.SelectObject(&MyPen);
CRect rect(0,0,400,300);
CBrush MyBrush(HS_CROSS,RGB(0,0,255));
dc.Ellipse(rect);
dc.SetTextColor(tcolor);
dc.SetBkMode(TRANSPARENT);
pOldFont=dc.SelectObject(&myfont);
myfont.CreateFontIndirect(&lfont);
dc.DrawText("ÍÛ£¡ÎÒ°®VC",&rect,DT_CENTER);
dc.SelectObject(pOldFont);
dc.SelectObject(OldPen);
// TODO: Add your message handler code here

// Do not call CView::OnPaint() for painting messages
}
blue2moon 2003-11-25
  • 打赏
  • 举报
回复
你把字体选择的代码写在onpaint中,总觉得不妥!也就是楼上的意思了。
talcon_hu 2003-11-25
  • 打赏
  • 举报
回复
不要在OnPaint里做任何需要等待输入的事情,如DoModal
yangang000 2003-11-25
  • 打赏
  • 举报
回复
输出文本之前应
pOldFnt=dc.SelectObject(&myfont);
输出之后
dc.SelectObject(pOldFnt);

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧