none
关于绘图的问题 RRS feed

  • 问题

  • 刚接触vs窗体应用程序项目,写了一个很简单的绘图的东西,运行时总停止响应,各位大大能帮忙看下不~谢谢啦~
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e)
                 {
                     tryG();
                 }

        private: void tryG()
                 {
                     System::Drawing::Pen^ myPen = gcnew System::Drawing::Pen(System::Drawing::Color::Red);
                     System::Drawing::Graphics^ formGraphics;
                     formGraphics = this->CreateGraphics();

                     bool reach[301][301];

                     for(int i=0; i<301; i++)
                         for(int j=0; j<301; j++)
                         {
                             if(i%2)
                                 reach[i][j] = true;
                         }

                         for(int i=0; i<301; i++)
                         {
                             for(int j=0; j<301; j++)
                             {
                                 if(reach[i][j])
                                 {
                                     formGraphics->DrawEllipse(myPen, i, j, 1, 1);
                                     Sleep(1);
                                 }
                             }
                         }
                         delete myPen;
                         delete formGraphics;
                 }
    PS:有时候画出来了图形也不太对,,我这个程序画出来应该是条形码的样子,但执行时一开始是条形码,后来就乱掉了。。。这是为什么啊?
    2009年6月2日 5:23

答案

  • 您好      tryG(); 不仅仅要在您点了按钮以后调用一次,  在运行的时候  很多情况下控件会被别的窗体遮盖  或者滚动移动 这时候您画的内容可能就不见了或者残缺了 这时候系统会发出一个事件

    OnPaint



    您可以在onpaint事件  调用  tryG();重新画
    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年6月3日 4:11
    版主
  • 你好!
         刚才帮你测试了一下,你这样修改:
         在Button的Click事件处理程序中调用窗体Refresh方法
         然后把绘图代码放到窗体的Paint事件处理程序中!
    周雪峰
    2009年6月3日 4:38
    版主

全部回复

  • 您好      tryG(); 不仅仅要在您点了按钮以后调用一次,  在运行的时候  很多情况下控件会被别的窗体遮盖  或者滚动移动 这时候您画的内容可能就不见了或者残缺了 这时候系统会发出一个事件

    OnPaint



    您可以在onpaint事件  调用  tryG();重新画
    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年6月3日 4:11
    版主
  • 你好!
         刚才帮你测试了一下,你这样修改:
         在Button的Click事件处理程序中调用窗体Refresh方法
         然后把绘图代码放到窗体的Paint事件处理程序中!
    周雪峰
    2009年6月3日 4:38
    版主