无法进入onpaint

问题描述

当我用以下代码进入一个窗体时Formms=newForm();ms.Show();无法进入ms中预先定义好的OnPaint,根本就不进入函数protectedoverridevoidOnPaint(PaintEventArgse){}只有在Application.Run(ms)下才能进入这是为什么?

解决方案

解决方案二:
在ms窗体的构造函数里加上this.SetStyle(ControlStyles.UserPaint,true);看看
解决方案三:
因为你没去研究OnPaint或Application.Run的本质。首先给你说OnPaintOnPaint是重绘事件,是Windows给的WM_PAINT消息,所以要收到这个消息才有可能触发这个事件然后是Application.Run(ms)这个意思是在ms这个窗体上开始主消息循环,就是这样一个过程whileGetMessage/PeekMessage(Msg)//取出主线程的消息{TranslateMessage(Msg);//转换消息DispatchMessage(Msg);//分发消息(可以把消息发到目的窗体)}所以没DispatchMessage的话,窗体是收不到消息的,窗体收到的消息实际上是主线程消息队列中取出来然后Dispatch给它的。
解决方案四:
在未调用Application.Run()方法前你的程序并未建立消息循环,因此你的窗体收不到任何消息。关于消息循环你可以参见Win32SDK.
解决方案五:
Formms=newForm();ms.Show();

你这里生成的Form的实例,而不是你自己定义的Form的派生类的实例,所以,这里生成的ms这个Form,只会执行原始的Form类的OnPaint方法,而不会执行你所定义的OnPaint方法。
解决方案六:
TO:lake_cx那我该如何发送消息呢?我这是从一个窗体中调用另一个窗体To:Misaki新建的窗体如何建立消息循环呢?To:dancingbit那个Form只是代表窗体意思To:hopewoo我这个是WindowsMobile程序,所以没有SetStyle方法谢谢大家!
解决方案七:
To:hopewoo我这个是WindowsMobile程序,所以没有SetStyle方法为什么现在提问的都这样呢。。。你认为我们是神仙,都能猜到你的实际情况?
解决方案八:
呵呵,不好意思,本来在移动板块问的,但是人太少了我想都是Winform,原理都差不多的,就没有说明。。

时间: 2024-08-31 15:23:49

无法进入onpaint的相关文章

位图显示-MFC中OnPaint函数显示BMP图片的问题

问题描述 MFC中OnPaint函数显示BMP图片的问题 为什么我在MFC对话框中,在OnPaint函数中加入以下代码,BMP图像不能显示啊~~· BITMAP bm; CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); CDC memdc; CDC dc; memdc.CreateCompatibleDC(&dc);/ bmp.GetBitmap(&bm); CBitmap *bmpold=memdc.SelectObject(&bmp);/ dc

OnPaint()函数的作用原理

WM_PAINT是窗口每次重绘都会产生的一个消息. OnPaint是对这个消息的反应函数   mfc 的 CWnd::OnPaint 没做什么,只是丢给系统处理. 一 :    先执行OnEraseBkgnd,擦除背景(如果想自绘控件,这个函数直接return TRUE就可以了,这样就不会擦除背景,不会闪)   OnEraseBkGnd与OnPaint的区别与联系 在OnEraseBkGnd中,如果你不调用原来缺省的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面,由于它

OnEraseBkGnd与OnPaint的联系 .

问题是这样产生的.在OnEraseBkGnd中,如果你不调用原来缺省  的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面,  由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd  函数,这时就和窗口缺省的背景刷相关了.缺省的  OnEraseBkGnd操作使用窗口的缺省背景刷刷新背景(一般情况  下是白刷),而随后你又自己重画背景造成屏幕闪动.  另外一个问题是OnEraseBkGnd不是每次都会被调用的.如果你  调用Invalidat

在OnPaint中必须调用一次BeginPaint和EndPaint,且也只能调用一次。(上) .

基于对话框的程序(mfc默认生成),重载OnEraseBkgnd函数,其它不动,若在OnPaint函数中不调用其基类的OnPaint函数,即注释掉CDialog::OnPaint();,代码如下: [cpp] view plaincopyprint? void CDDDDlg::OnPaint()   {       if (IsIconic())       {           CPaintDC dc(this); // device context for painting      

MFC中改变对话框背景的几个消息函数OnEraseBkgnd、 OnPaint、 OnCtlColor的调用顺序

设置对话框背景颜色及背景图片可在OnCtlColor(),OnEraseBkgnd(),OnPaint()里设置,对话框初始化完毕,显示时调用OnSize()->OnEraseBkgnd(),->OnPaint()->OnCtlColor(), 若想改变对话框大小,比如全屏显示ShowWindow(SW_SHOWMAXIMIZED);UpdateWindow(); 其中 ShowWindow会调用OnSize()->OnEraseBkgnd(),         UpdateWin

onpaint-求高手解答:C# winform中protected 的OnPaint被谁调用?

问题描述 求高手解答:C# winform中protected 的OnPaint被谁调用? winform中控件的绘制都是通过OnPaint它来完成的.因为OnPaint是Protected的,所以,它必然是在本类.子类中被调用的.根据控件的继承结构,最后知道在System.Windows.Forms.Control中应该有一个逻辑调用OnPaint. 查找这一个逻辑,发现WndProc中有处理消息的机制,其中调用WmPaint,本以为在其中会调用OnPaint的,结果没有. 在查找其他可能的地

mfc-MFC 基于对话框的画图问题 OnPaint()函数不解

问题描述 MFC 基于对话框的画图问题 OnPaint()函数不解 我在对话框中插入了一个tab control,用来画两个曲线图,其中一个是直接在界面上画的,用Moveto和Lineto函数,但是为什么我在切换tab控件的时候,那个曲线之前画的图像都没有了,从我切换过去之后重新开始画了呢?麻烦大家啦~ 解决方案 Tab切换会重新刷新,绘图内容会清除. 你要保留旧图就应该用绘图缓冲区,先在缓冲区中绘图,输出到界面. Tab切换时就不用从头绘图,直接把缓冲区输出到界面. 解决方案二: 切换函数可能

mfc 动态创建窗口-一个CWnd对象的onpaint函数中,动态Create两个子窗口时造成wincore.cpp中的断言错误。

问题描述 一个CWnd对象的onpaint函数中,动态Create两个子窗口时造成wincore.cpp中的断言错误. 一个对话框子类CViewDlg 在onpaint函数中需要再动态创建两个子窗口 void CViewDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 CRect rect; GetClientRect(&rect); m_wnd1->Create

如何自由调用onPaint()函数,实现对图形的控制

问题描述 情况如下:点击窗体菜单项"图形"时,弹出对话框,通过该对话框用户可以选择"直线,圆形",(直线要求输入两端点的xy坐标,对于圆则要求输入圆心和半径)在窗体上画出相应图形.问题:关闭对话框后如何调用窗体的onpaint()的方法实现能自由画圆或者直线? 解决方案 解决方案二:up!我在线等,麻烦大家了.我搞了好久都卡在这里了.解决方案三:up!!!解决方案四:对话框应该是个新form,用他传值,然后在form1里用this.Invalidate();不是就可