这些技巧主要是在我的项目中用到的,为了达到记忆的目的:
1.实现目录选择
使用API
SHBrowseForFolder实现,实例代码如下:
1
UpdateData();
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示例代码:
1
UpdateData();//取得图片路径,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
2
CPaintDC 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 阅读(440)
评论(0) 编辑 收藏 引用 所属分类:
Win32