各位高手,我是VC的初学者,现请教如下问题:窗口中有两幅图片,想要在运行后,一幅图片显示在窗口的中央且是固定的,另一幅图片可通过鼠标将其移动到窗口内任何位置并且通过键盘上的上下左右方向键也能使这幅图片在窗口内随意移动.还有,我加了一个picture控件,但在classwizard中却看不到这个控件,也就无法对其添加代码了,不知原因???
请大家指点,万分感激!!!!!!

解决方案 »

  1.   

    显示位置固定的图像:方法一,添加一个picture控件,将type设为bitmap,将要显示的图片导入工程,在控件的image 属性中选择导入图片的资源id。方法二,在OnPaint函数中添加如下代码
    HBITMAP hBitmap;
    hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_strBMPfn/*your bmp file name*/,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    ASSERT(hBitmap);
    HBITMAP OldBitmap;
        CDC MemDC;
        MemDC.CreateCompatibleDC(&dc);
        OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
        ///显示它
    int oldmode;
    if(dc.GetDeviceCaps(RASTERCAPS)&RC_STRETCHBLT==0)
    {
    MessageBox("can't support");
    return;
    }
    oldmode=dc.SetStretchBltMode(COLORONCOLOR);
    dc.StretchBlt(destleft/*upleft point's x coordinate*/,destup/*upleft point's y coordinate*/,destwidth,destheight,&MemDC,0,0,lwidth/*bitmap's width*/,lheight/*bitmap's height*/,SRCCOPY);
    dc.SetStretchBltMode(oldmode);
        MemDC.SelectObject(OldBitmap);显示可移动图像的方法:将显示目标区域的左上角坐标值和宽高值设为全局变量,在你的鼠标移动和键盘的响应函数中修改这些全局变量为你所希望的值,然后使用InvalidateRect函数重画窗口,程序会执行OnPaint函数,你只需将上面StretchBlt函数中的相应变量改为相应的全局变量即可
      

  2.   

    重载WindowProc函数,在里面可以通过message来判断是否有WM_KEYDOWN消息,同时判断wparam是否为VK_LEFT等按键,如果满足上述条件就执行在相应位置显示图片的函数。来判断是Picture在不添加图片时,就象一个普通的Static控件。