thread. You could find some info about it in MSDN, and I guess, Joe will
explain you this problem with more details. :)
//*********** code *************//
unsigned long _stdcall RunLoadThumbnailThread( LPVOID lpParam )
{
int nIndex = 0;
std::vector<CString>::iterator iter;
CThumbView *pView = (CThumbView*)lpParam;
CePhotoSyncDoc *pDoc = (CePhotoSyncDoc*)pView->GetDocument();
CListCtrl& ListCtrl = pView->GetListCtrl();
CImageList *pImgList = &pView->m_ImageListThumb;
int iImageCount = pImgList->GetImageCount();
for( int i=0; i < iImageCount; i++ )
{
pImgList->Remove(i);
}
ListCtrl.DeleteAllItems();
pImgList->SetImageCount( pDoc->m_vFileName.size() );
ListCtrl.SetRedraw( FALSE );
for( iter = pDoc->m_vFileName.begin();
iter != pDoc->m_vFileName.end() && pView->m_bTerminate != TRUE;
iter++, nIndex++ )
{
HBITMAP hbmReturn = NULL;
Bitmap *bmPhoto = NULL;
CBitmap Bmp1;
ListCtrl.InsertItem( nIndex, *iter, nIndex );
CString path; path.Empty();
path.Format( _T("%s\\%s"), pDoc->m_strCurrentDirectory, *iter);
Bitmap image( path.AllocSysString() );
int sourceWidth = image.GetWidth();
int sourceHeight = image.GetHeight();
int destX = 0, destY = 0;
float nPercent = 0;
float nPercentW = ((float)THUMBNAIL_WIDTH/(float)sourceWidth);;
float nPercentH = ((float)THUMBNAIL_HEIGHT/(float)sourceHeight);
if(nPercentH < nPercentW)
{
nPercent = nPercentH;
destX = (int)((THUMBNAIL_WIDTH - (sourceWidth * nPercent))/2);
}
else
{
nPercent = nPercentW;
destY = (int)((THUMBNAIL_HEIGHT - (sourceHeight * nPercent))/2);
}
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
bmPhoto = new Bitmap( THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT,
PixelFormat24bppRGB );
bmPhoto->SetResolution( image.GetHorizontalResolution(),
image.GetVerticalResolution() );
Graphics *grPhoto = Graphics::FromImage( bmPhoto );
Color colorW(255, 255, 255, 255);
grPhoto->Clear( colorW );
grPhoto->SetInterpolationMode( InterpolationModeHighQualityBicubic );
grPhoto->DrawImage( &image, Rect(destX, destY, destWidth, destHeight) );
bmPhoto->GetHBITMAP( colorW, &hbmReturn );
Bmp1.Attach( hbmReturn );
pImgList->Replace( nIndex, &Bmp1, NULL );
delete grPhoto;
delete bmPhoto;
Bmp1.Detach();
DeleteObject( hbmReturn );
}
ListCtrl.SetRedraw(TRUE);
ListCtrl.Invalidate();
pView->m_bRunning = FALSE;
pView->m_bTerminate = FALSE;
pView->m_hThreadLoad = NULL;
::CloseHandle( pView->m_hThreadLoad );
return 0;
}
//*********** code *************//
Above is the code I got from the Internet, run as a thread.
I don't really know the icon you mentioned, can you explain more for me?
Thanks.
"Tom Serface" wrote:
How are you setting up your bitmaps? Are you thinking your bitmap *is*
the icon?
Tom
"97612" <97612@discussions.microsoft.com> wrote in message
news:D80A4D57-F38E-4E3B-8561-254D852B9EE9@microsoft.com...
I got another problem. When I click a thumbnail image, the
"hitinfo.flags != LVHT_ONITEMSTATEICON" still true, and the program
returned. I don't know if I use the wrong way?
Below is my source code:
void CThumbView::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
CListCtrl& ListCtrl = GetListCtrl();
LVHITTESTINFO hitinfo;
*pResult = 0;
//Copy click point
hitinfo.pt = pNMLV->ptAction;
//Make the hit test...
int nItem = ListCtrl.HitTest(&hitinfo);
//No click on image item, return
if(hitinfo.flags != LVHT_ONITEMSTATEICON)
return;
//Image item hit
CePhotoSyncDoc* pDoc = (CePhotoSyncDoc*)GetDocument();
ASSERT_VALID(pDoc);
pDoc->SelectItem( pNMLV->iItem );
pDoc->UpdateAllViews(this, UPDATE_PREVIEW);
}
"97612" wrote:
Thanks for your help, it works.
Thanks a lot.
"Tom Serface" wrote:
You could check if the user clicked on the state icon:
NMLISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
LVHITTESTINFO hitinfo;
*pResult = 0;
//Copy click point
hitinfo.pt = pNMListView->ptAction;
//Make the hit test...
int nItem = m_cList.HitTest(&hitinfo);
if(hitinfo.flags != LVHT_ONITEMSTATEICON)
return; // Didn't click on an icon
Tom
"97612" <97612@discussions.microsoft.com> wrote in message
news:5FA84CE6-E121-4AE9-8AC8-C3D3C6B6A0D3@microsoft.com...
I use CListView to draw the thumbnail of a image list. And I want
to
add
the
checkbox for the image list. When I select a thumbnail, the
CListView
will
trigger the "OnLvnItemchanged" event to let another view to show
the
preview
image of the selected image.
My problem is that when I use
"ListCtrl.SetExtendedStyle(ListCtrl.GetStyle()|LVS_EX_CHECKBOXES )",
the
"OnLvnItemchanged" is trigger by the initial operation for
checkbox.
This
is
not I expected, how can I solve the problem?
Thanks for your help.