找本vc的书,看看CDC绘图的章节。

解决方案 »

  1.   

    z_sky,你见过哪本书里有介绍putpixel()的吗?,连MSDN里都没有
      

  2.   

    看来你已经看了好几本书了。:-)标准C/C++的库函数是不包含绘图函数的,所以不同的系统绘图函数当然可以是不同的,你得找功能相近的来代替。
    如果只是要画点,简单点,你可以用GDI的SetPixel(...); 要追求高级点,你可以看看directX的函数功能。
      

  3.   

    我这里有Turbo C的分形源代码:
    void Fractal(double x0, double y0, double x1, double y1, int n)
    {
    double px,py;
    if(n<=N)
    {
            px=x0+(a*(x1-x0)-b*(y1-y0));
            py=y0+(b*(x1-x0)+a*(y1-y0));        putpixel(px,-py,215);
            Fractal(x0,y0,px,py,n+1);
    Fractal(px,py,x1,y1,n+1);
    }}void main(void)
    {
       ginit();
       setviewport(sx,sy);
       a=1/(1+t*t);
       b=t/(1+t*t);
       putpixel(0,0,9);
       putpixel(length0,0,12);
       Fractal(0.0,0.0,length0,0.0,1);
       gend();
    }
    (此程序在Turbo C 下运行成功)
    我搞不懂setviewport()和putpixel()的关系,setviewport()应该是将计算值逻辑映射到屏幕上,putpixel()是画点,在程序里好像看不出两者有何关系。
    而在MFC里用CDC::SetViewportExt()和CDC::SetPixel()咋就不行呢???
      

  4.   

    我这里有Turbo C的分形源代码:
    void Fractal(double x0, double y0, double x1, double y1, int n)
    {
    double px,py;
    if(n<=N)
    {
            px=x0+(a*(x1-x0)-b*(y1-y0));
            py=y0+(b*(x1-x0)+a*(y1-y0));        putpixel(px,-py,215);
            Fractal(x0,y0,px,py,n+1);
    Fractal(px,py,x1,y1,n+1);
    }}void main(void)
    {
       ginit();
       setviewport(sx,sy);
       a=1/(1+t*t);
       b=t/(1+t*t);
       putpixel(0,0,9);
       putpixel(length0,0,12);
       Fractal(0.0,0.0,length0,0.0,1);
       gend();
    }
    (此程序在Turbo C 下运行成功)
    我搞不懂setviewport()和putpixel()的关系,setviewport()应该是将计算值逻辑映射到屏幕上,putpixel()是画点,在程序里好像看不出两者有何关系。
    而在MFC里用CDC::SetViewportExt()和CDC::SetPixel()咋就不行呢???
      

  5.   

    TC里的setviewport()好象是5个参数
    void far setviewport(int left, int top, int right, int bottom, int clip);
    他设定了以后绘图函数的输出范围,就是说,以后画点在(0,0)处,实际上是在屏幕上绝对位置(left,top)处,这就是他们的关系;
    windows下的GUI绘图有更多功能,包括设置坐标系,映射,单位等,很复杂,如果要好好了解就仔细看看相关的数。如果只是要简单试一下,建议不用管setviewport的,GetDC()之后直接画点就是了,缺省按象素为单位,输出再view的客户区。还有就是,绘图最好在View的OnPaint()里面进行。
      

  6.   

    对,setviewport()是5个参数,我刚才改错了,那个位置原来是包括setviewport()的一个函数名,后面带两个参数。你说得对。
      

  7.   

    放在OnDraw()函数中:pDC->SetPixel(int x,int y,RGB(1255,12,222));
    即可!!
      

  8.   

    画点我已经会了,现在关键是这个映射CDC::SetViewportExt()还是搞不懂,怎么用 ??
      

  9.   

    CDC::SetViewportExt()好像不是干这个用的,是对窗口进行映射,I suppose.