toolbar: CCS_NOPARENTALIGN
1.方法一:
可参考的接口: msdn ->GDI Function
2.方法二:
Vs 2005 + wm6sdk 平台绘制九宫格的界面:
在listview上绘制九宫格界面,new cimagelist,cimagelist->creat(…),方法指定图片的大小,利用listview下的方法setimagelist(…), 绑定之前的imagelist对象,这样图片的大小只能是32*32, 用wm6 sdk 下的ListView_SetItemPosition(),可相对改变 图片的位置;九宫格的界面就出来了;
非.bmp,.cion的图片加载,wm6 sdk下提供了一个API:SHLoadImageResource()
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高的,其中全大写的都是宏定义的图片路径,所有图片都是动态加载的为了便于换肤,而且由于九宫格图标顺序可能会变,因此九张图片是分开的