这些技巧主要是在我的项目中用到的,为了达到记忆的目的:
1.实现目录选择
使用API
SHBrowseForFolder实现,实例代码如下:
1UpdateData();
2 char Buf[MAX_PATH];
3 LPITEMIDLIST lp;
4 BROWSEINFO bs;
5 bs.hwndOwner=NULL;
6 bs.pidlRoot=NULL;
7 bs.pszDisplayName=Buf;
8 bs.lpszTitle=_T("请选择存放目录");
9 bs.ulFlags=BIF_RETURNONLYFSDIRS;//只选择文件系统目录
10 bs.lpfn=NULL;
11 bs.iImage=0;
12 lp=SHBrowseForFolder(&bs);
13 if(lp){
15 SHGetPathFromIDList(lp,Buf);
16 m_Path=Buf;//所需的目录名
17 }
18 UpdateData(FALSE);
19
2.一个好用的CPiture类
/Files/fenglinuestc/picture.rar示例代码:
1UpdateData();//取得图片路径,m_Picture 为CPicture对像
2 CFileDialog cfd(TRUE,NULL,NULL,0,"All Image File(*.jpg,*.jpeg,*Gif,*BMP)|*.jpg;*.jpeg;*.gif;*.bmp;||");
3 if(cfd.DoModal()==IDOK)
4 {
5 m_bkPath=cfd.GetPathName();
6 UpdateData(FALSE);
7 m_Picture.Load(m_bkPath);
8 if(m_Picture)//如果可用
9 {
10 GetDlgItem(IDC_FRMAE)->EnableWindow(TRUE);
11 UpdateData(TRUE);
12 BeginWaitCursor();
13 Invalidate();//重画
14 EndWaitCursor();
15 }
16 }
重画的时候只要使用.Render(CDC * dc,Crect rect)定位到一个rect就可以显示图片,接着上边的重画消息的示例代码如下:
1//WM_PAINT
2CPaintDC dc(this); // device context for painting
3 if(m_Picture)
4 {
5 CRect rect;
6 CWnd *previewwnd=GetDlgItem(IDC_FRMAE);//IDC_FRAME,通常为一个Groupbox
7 previewwnd->GetWindowRect(rect);
8 ScreenToClient(rect);
9 //显示到rect中
10 m_Picture.Render(&dc,rect);
11 }
3.窗口添加ContextMenu的方法
//ON_WM_CONTEXTMENU..
::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
//IDM_CHILDMENU为一ContextMenu
VERIFY(menu.LoadMenu(MAKEINTRESOURCE(IDM_CHILDMENU)));
//Pull out the first popup menu from it
CMenu* pPopup=menu.GetSubMenu(0);
ASSERT(pPopup!=NULL);
CWnd * pWndPopupOwner=this;
while(pWndPopupOwner->GetStyle()&WS_CHILD)
pWndPopupOwner=pWndPopupOwner->GetParent();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner);
}
Continue..
posted on 2007-09-13 12:26
Lexili 阅读(431)
评论(0) 编辑 收藏 引用 所属分类:
Win32