在mfc中,如何通过对话框中的控件调用OnDraw()函数?

作者&投稿:博受 (若有异议请与网页底部的电邮联系)
mfc对话框中能否使用OnDraw等函数~

可以的,要用绘制,还要注意在背景之后绘,否则会被遮住
代码:
CDC *p=this->GetDC();
CPen pen;
p->SetBkMode(TRANSPARENT);
p->TextOut(rect.left,rect.top,"需绘制的文字"); //输出文字
不一定要在OnDraw函数里绘制,随便什么函数都可以,但是要和背景绘制的顺序确定好,防止被遮住

OnDraw函数不用自己调用,当窗口需要重新绘制,系统会自动调。
如果自己想重新绘制,可以调用Invalidate、InvalidateRect或者UpdateWindow等函数,引起绘制即可。

ondraw有很多的消息都可以触发,你可以自定义一个函数,函数让ondraw调用,给一个变量来标识是否允许自定义函数执行,比如

void Fun
{
if(flag)

{

//do something

}

}
你自己控制flag来实现你的要求

这个你看看多文档程序的执行过程,对你理解程序函数执行过程很有帮助~~

一般你不写代码,默认的话,就是在点击控件之前,视图中不可以绘制图形。
例子:
void CBMP24View::OnDraw(CDC* pDC)
{
CBMP24Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc) //你看看~应该是第一次打开不绘制
return;

// TODO:

CRect rect;
GetClientRect(&rect);
if (!pDoc->bData) 你看看~应该是第一次打开不绘制
return;

long biWidth=pDoc->bInfo->bmiHeader.biWidth;
long biHeight=pDoc->bInfo->bmiHeader.biHeight;
//使图像显示在客户区的正中央
int ox,oy;
if((unsigned long)(rect.Width()) > biWidth)
ox = (rect.Width() - biWidth) / 2;
else ox=0;
if((unsigned long)(rect.Height()) > biHeight)
oy = (rect.Height() - biHeight)>>1;
else oy=0;
//将整个图像或部分显示在客户区
SetDIBitsToDevice(pDC->m_hDC, ox, oy, biWidth, biHeight, 0, 0, 0, -biHeight,
pDoc->bData,pDoc->bInfo,DIB_RGB_COLORS);

}

添加控件按钮后,点击按钮不是有添加类向导吗,在里面定义ondraw()函数,定义成功后,双击该按钮,会在程序中进入ondrow()函数体,将你原来ondrow()函数中的语句添加进去就行了,试试吧。

可以给控件添加一个 bool 变量,初始化的时候false,在绘图之前先检测那个变量的值

加一个变量,监视控件是否点击.点击的时候,调用Invalidate

mfc中怎样在一个基于对话框程序中添加菜单栏 急。。。!
答:在对话框头文件中声明CMenu 变量,例如m_Menu;在OnInitDlg()中加入如下语句:m_Menu.LoadMenu("此处加入你的菜单id");SetMenu(&m_Menu);就可以了

在MFC中,如何在对话框和视图类之间传递数据
答:使用变量通过引用来传递,视图类和对话框都拥有一样的需要传递的变量,譬如视图类传过去对话框的时候,在对话框设置一个SetData的函数,参数就是你需要传递的变量的引用,专门用来在现实之前设置对话框对应的变量的值的,在domodel之前先调用SetData来设置相应的值,对话框传递到视图类也是一样,在销毁对话...

vs2010中,MFC基于对话框的编程,在一个对话框中想要获取其他对话框中变...
答:用的较多的是:CWnd::GetDlgItem再使用CWnd::GetWindowText还有一个是 CWnd::GetDlgItemText 这些都是比较常用的、例如获取一个EDIT控件的文本,ID是IDC_EDITRESULT 第一种方式:CString str_edit;GetDlgItem(IDC_EDITRESULT)->GetWindowText(str_edit);第二种方式:CString str_edit;GetDlgItemText(IDC_EDIT...

MFC如何在对话框中输入文字
答:{ cformview::oninitialupdate();/ 加入你要的初始化代码*/ getparentframe()->recalclayout();resizeparenttofit();} 在cformview中,通过跟踪可发现程序不会去调用cdialog::oninitdialog(),在cformview::create(**)中有如下语句createdlg(m_lpsztemplatename,pparentwnd),既对话框通过非模态创建,...

MFC 模态对话框, 如何在一个对话框中判断是哪个对话框DoModal的他
答:在C中设置一个成员变量标志位来判断是A还是B,如int flag;A调用时, CCDlg dlg;dlg.flag=1;dlg.DoModal();B调用时,CCDlg dlg;dlg.flag=2;dlg.DoModal();

谁知道怎么在MFC对话框中显示位图?
答:在OnPaint()中加入以下代码 //在对话框中直接显示图像 BITMAP bm;CBitmap bmp;//定义CBitmap 类的对象 bmp.LoadBitmap(IDB_BITMAP1);//装入ID号为IDB_BITMAP1的位图 CDC memdc;//定义CDC类的对象 CRect rect;memdc.CreateCompatibleDC(&dc);//创建与显示DC相兼容的内存DC bmp.GetBitmap(&...

MFC怎么在一个对话框中调用另一个对话框中的list control控件_百度知 ...
答:定义一个全局指针变量a_this,把A_Dlg的this赋值给它。在B_Dlg中访问即可,(CA*)a_this->m_list.InsertItem(0,_T("hello"));

mfc中如何在一个对话框中调用另外一个对话框的函数
答:模态对话框下,用户需要操作目标对话框就必须先操作模态对话框。用户对模态对话框的处理如图所示。 模态对话框的处理过程,非模态对话框(又叫做无模式对话框),与模态对话框不同,当用户打开非模态对话框时,依然可以操作其他窗口。 建立模态对话框 选择File/New/MFC AppWizard[exe],Project name为Test,单击OK. 选择...

在VC++中的MFC利用一个dialoge对话框中按钮调用另一个dialoge对话框
答:1.可以调用模态的对话框 void ADlg:: Button(){ BDlg bdlg;bdlg.DoModal();} 2.调用非模态 在 Adlg.h 包含 Bdlg.h头文件 中定义 BDlg* m_pdblg;在Adlg.cpp中 在构造函数中初始化 m_pdblg = NULL;在析构函数中 if(m_pdblg != NULL){ delete m_pdblg;} 在单击按钮中 void ...

MFC的对话框中如何单击一个按钮,在其响应代码中编辑代码引起另一个按钮...
答:直接把调用该按钮的函数就行了 void Cbutton_testDlg::OnBnClickedButton1() //Button1 在 m_edit 里打印 { // TODO: 在此添加控件通知处理程序代码 m_edit = "打印";UpdateData(FALSE);} void Cbutton_testDlg::OnBnClickedButton2() //Button2 调用Button1,相当于按下Button1 { //...