现在的位置: 首页 > 综合 > 正文

vc + wm6 贴图方面的资料

2014年11月27日 ⁄ 综合 ⁄ 共 3363字 ⁄ 字号 评论关闭

toolbar:  CCS_NOPARENTALIGN

1.方法一:

              可参考的接口:  msdn  ->GDI Function  

2.方法二:

              Vs 2005 + wm6sdk 平台绘制九宫格的界面:

           listview上绘制九宫格界面,new cimagelistcimagelist->creat(…),方法指定图片的大小,利用listview下的方法setimagelist(…), 绑定之前的imagelist对象,这样图片的大小只能是32*32  wm6  sdk 下的ListView_SetItemPosition(),可相对改变 图片的位置;九宫格的界面就出来了;

  .bmp,.cion的图片加载,wm6  sdk下提供了一个APISHLoadImageResource()

This function converts files of several types, including GIF (Graphics Interchange Format), PNG (Portable Network Graphics), JPG (Joint Photographic Experts Group), ICO (icon), and BMP (bitmap) file formats.

 

 3.方法三:

               利用CImagelist下提供的方法贴图,例如,ImageList_DrawEx

 

 4.方法四:

我实现了,是从配置文件中读取到九宫格的顺序,生成DC

// 按照字符串排列九宫格图标,生成CDC位图

 

        CDC *pDC = GetDC();

        CBitmap bmpBnkgnd;

       bmpBnkgnd.CreateCompatibleBitmap(pDC,g_iWidth,270);//创建兼容的内存位图

        m_membkDC.SelectObject(&bmpBnkgnd);//将兼容位图选进兼容的DC

 

        //////////////////////////////////////////////////////////////////////////

        CString picpath;

        CDC BannerDC;

        BannerDC.CreateCompatibleDC(pDC);

        CBitmap bmpBanner;

        int n = 0;

        for(int i = 0; i<9; i++)

        {

                picpath = g_strExePath;picpath += NINEDOWNBMP;

                picpath += str.GetAt(i);picpath += L".bmp";

                VERIFY(bmpBanner.Attach(SHLoadImageFile(picpath)));

                BannerDC.SelectObject(&bmpBanner);

                if (i/3<1)

                        VERIFY(m_membkDC.BitBlt((i%3)*NinePos.iIconWidth,0,NinePos.iIconWidth,NinePos.iIconHigh,&BannerDC,0,0,SRCCOPY));

                if (i/3 == 1)

                        VERIFY(m_membkDC.BitBlt((i%3)*NinePos.iIconWidth,NinePos.iIconHigh,NinePos.iIconWidth,NinePos.iIconHigh,&BannerDC,0,0,SRCCOPY));

                if (i/3 > 1)

                        VERIFY(m_membkDC.BitBlt((i%3)*NinePos.iIconWidth,NinePos.iIconHigh*2,NinePos.iIconWidth,NinePos.iIconHigh,&BannerDC,0,0,SRCCOPY));

                bmpBanner.Detach();

        }

        pDC->BitBlt(0,NinePos.iHigh1,g_iWidth,NinePos.iHigh2,&m_membkDC,0,0,SRCCOPY);

复制代码

//接下来根据点击坐标判断点击的九宫格位置

        if ((PointY<=NinePos.iHigh1)||(PointY>NinePos.iHigh1+NinePos.iHigh2))//首先判断是否点击进九宫格区域,没有根据屏幕和图片适配

                return -1;

        int nCol = (PointX/* - NinePos.iWidth2*/) / 80;

        int nRow = (PointY - NinePos.iHigh1) / 90;

        if(nCol >= 0 && nCol < 3 && nRow >= 0 && nRow < 3)

                return nRow * 3 + nCol;

        else

                return -1;

复制代码

//绘制九宫格的方法
//
根据iSel判断当前九宫格的焦点

        CDC *pDC = GetDC();

        CBitmap bmpBnkgnd;

        bmpBnkgnd.CreateCompatibleBitmap(pDC,g_iWidth,270);//创建兼容的内存位图

        m_membkDC.SelectObject(&bmpBnkgnd);//将兼容位图选进兼容的DC

 

        //////////////////////////////////////////////////////////////////////////

        CString picpath;

        CDC BannerDC;

        BannerDC.CreateCompatibleDC(pDC);

        CBitmap bmpBanner;

        for(int i = 0; i<9; i++)

        {

                picpath = g_strExePath;

                if (i == iSel)

                {

                        picpath+=NINEUPBMP;

                }

                else

                        picpath += NINEDOWNBMP;

                picpath += m_strNineIcon.GetAt(i);

                picpath += L".bmp";

                VERIFY(bmpBanner.Attach(SHLoadImageFile(picpath)));

                BannerDC.SelectObject(&bmpBanner);

                if (i/3<1)

                        VERIFY(m_membkDC.BitBlt((i%3)*80,0,80,90,&BannerDC,0,0,SRCCOPY));

                else if (i/3 == 1)

                        VERIFY(m_membkDC.BitBlt((i%3)*80,90,80,90,&BannerDC,0,0,SRCCOPY));

                else if (i/3 > 1)

                        VERIFY(m_membkDC.BitBlt((i%3)*80,180,80,90,&BannerDC,0,0,SRCCOPY));

                bmpBanner.Detach();

        }

        pDC->BitBlt(0,NinePos.iHigh1,g_iWidth,270,&m_membkDC,0,0,SRCCOPY);

        ReleaseDC(pDC);

复制代码

//还要在PreTranslateMessage里面判断按键消息

可能不完整,九宫格每个图片都是80宽,90高的,其中全大写的都是宏定义的图片路径,所有图片都是动态加载的为了便于换肤,而且由于九宫格图标顺序可能会变,因此九张图片是分开的

 

抱歉!评论已关闭.