高手请进!在list box插入并显示bmp图片

chenping198 2009-03-12 02:56:19
问题描述:
dialog中有两个list box控件,两个button,四张bmp图片(自己截的图,存放在工程同个目录下的)。
将实现的功能:
当点击button1时,list box1和list box2中分别显示图片1、图片2;点击button2时,list box1和list box2中显示图片3和图片4。

请教:如何实现以上功能?请给出具体的实例及代码,谢谢
...全文
171 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fandh 2009-03-19
  • 打赏
  • 举报
回复
你还是用这个吧:
http://download.csdn.net/source/995270
这个更好用!
sneaper 2009-03-14
  • 打赏
  • 举报
回复
pudn上好多这方面的代码
paerxiushi 2009-03-14
  • 打赏
  • 举报
回复
建立两个自绘的列表框,初始化时向两个列表框中分别加入一项字符串。当单击按钮时,设置位图ID到列表框项目上的数据,然后刷新列表框来重绘。
#define ID1 4
#define ID2 5
#define BTNID 123
#define BTNID1 124
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
TCHAR szMessage[1024]={0};
static HWND hListBox;
static HWND hListBox1;
static HWND hBtn1;
static HWND hBtn2;

LPMEASUREITEMSTRUCT pMeasureItem;
LPDRAWITEMSTRUCT pDrawItem;


switch (message)
{
case WM_CREATE:
hListBox=CreateWindow(_T("listbox"),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|LBS_NOTIFY|LBS_OWNERDRAWFIXED,400,50,100,300,hWnd,(HMENU)ID1,hInst,NULL);
SendMessage(hListBox,LB_ADDSTRING,NULL,(LPARAM)_T("12"));
hListBox1=CreateWindow(_T("listbox"),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|LBS_NOTIFY|LBS_OWNERDRAWFIXED,200,50,100,300,hWnd,(HMENU)ID2,hInst,NULL);
SendMessage(hListBox1,LB_ADDSTRING,NULL,(LPARAM)_T("12"));
hBtn1=CreateWindow(_T("button"),NULL,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,200,450,140,30,hWnd,(HMENU)BTNID,hInst,NULL);
hBtn2=CreateWindow(_T("button"),NULL,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,400,450,140,30,hWnd,(HMENU)BTNID1,hInst,NULL);
break;
case WM_COMMAND:
if(LOWORD(wParam)==BTNID)
{
SendMessage(hListBox,LB_SETITEMDATA,0,(LPARAM)IDB_BITMAP1);
SendMessage(hListBox1,LB_SETITEMDATA,0,(LPARAM)IDB_BITMAP2);
InvalidateRect(hListBox,NULL,TRUE);
InvalidateRect(hListBox1,NULL,TRUE);
}
if(LOWORD(wParam)==BTNID1)
{
SendMessage(hListBox,LB_SETITEMDATA,0,(LPARAM)IDB_BITMAP3);
SendMessage(hListBox1,LB_SETITEMDATA,0,(LPARAM)IDB_BITMAP4);
InvalidateRect(hListBox,NULL,TRUE);
InvalidateRect(hListBox1,NULL,TRUE);

}
break;
case WM_MEASUREITEM:
pMeasureItem=(LPMEASUREITEMSTRUCT)lParam;
if(pMeasureItem->CtlType==ODT_LISTBOX)
{

pMeasureItem->itemHeight=100;
return TRUE;

}
break;

case WM_DRAWITEM:
{
pDrawItem=(LPDRAWITEMSTRUCT)lParam;

int id=pDrawItem->itemData;
HBITMAP hbmp=LoadBitmap(hInst,MAKEINTRESOURCE(id));
BITMAP bmp;
GetObject(hbmp,sizeof(BITMAP),&bmp);
HDC hMemDC= CreateCompatibleDC(pDrawItem->hDC);
HBITMAP holdBmp=(HBITMAP)SelectObject(hMemDC,hbmp);
StretchBlt(pDrawItem->hDC,pDrawItem->rcItem.left,pDrawItem->rcItem.top,pDrawItem->rcItem.right,pDrawItem->rcItem.bottom,
hMemDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
SelectObject(hMemDC,holdBmp);
DeleteDC(hMemDC);
if(pDrawItem->itemState & ODS_FOCUS)
DrawFocusRect(pDrawItem->hDC,&pDrawItem->rcItem);

}



return TRUE;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,message, wParam, lParam);
}

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧