Re: CListView with checkbox problem
 
//*********** 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.