| liang 的个人资料阿斯提亚神殿——梦幻天子's sky照片日志列表 | 帮助 |
|
11月26日 批处理的替换变量(转载)变量(使用修改程序) 说明 %~I 展开删除了周围的任何引号 (") 的 %I %~fI 将 %I 展开到完全合格的路径名 %~dI 只将 %I 展开到驱动器号 %~pI 只将 %I 展开到路径 %~nI 只将 %I 展开到文件名 %~xI 只将 %I 展开到文件扩展名 %~sI 展开路径以只包含短名称 %~aI 将 %I 展开到文件的文件属性 %~tI 将 %I 展开到文件的日期/时间 %~zI 将 %I 展开到文件大小 %~$PATH:I 搜索 PATH 环境变量所列出的目录,并将 %I 展开开到第一个找到结果的全部合格名称。如果没有定义环境变量名,或搜索后没有找到文件,则此修改程序将扩展为空字符串。 修改程序可以合并以获得复杂的结果: 变量(使用合并的修改程序) 说明 %~dpI 只将 %I 展开到驱动器号和路径 %~nxI 只将 %I 展开到文件名和扩展名 %~fsI 将 %I 展开到只包含短名称的完整路径名 %~dp$PATH:I 在 PATH 环境变量所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径 %~ftzaI 将 %I 扩展到与 dir 相似的输出行 菜单的使用(转载)利用菜单接受用户命令是一中很简单的交互方法,同时也是一种很有效的方法。通常菜单作为一中资源存储在文件中,因此我们可以在设计时就利用资源编辑器设计好一个菜单。关于使用VC设计菜单我就不再多讲了,但你在编写菜单时应该尽量在属性对话框的底部提示(Prompt)处输入文字,这虽然不是必要的,但MFC在有状态栏和工具条的情况下会使用该文字,文字的格式为“状态栏出说明\n工具条提示”。 ![]() 我们要面临的任务是如何知道用户何时选择了菜单,他选的是什么菜单项。当用户选择了一个有效的菜单项时系统会向应用发送一个WM_COMMAND消息,在消息的参数中表明来源。在MFC中我们只需要进行一次映射,将某一菜单ID映射到一处理函数。在这里我们在CView的派生类中处理菜单消息,同时我对同一ID设置两个消息映射,接下来将这两种映射的作用。 ![]() ON_COMMAND 映射的作用为在用户选择该菜单时调用指定的处理函数。如:ON_COMMAND(IDM_COMMAND1, OnCommand1)会使菜单被选择时调用OnCommand1成员函数。 ON_UPDATE_COMMAND_UI(IDM_COMMAND1, OnUpdateCommand1) 映射的作用是在菜单被显示时通过调用指定的函数来进行确定其状态。在这个处理函数中你可以设置菜单的允许/禁止状态,其显示字符串是什么,是否在前面打钩。函数的参数为CCmdUI* pCmdUI,CCmdUI是MFC专门为更新命令提供的一个类,你可以调用
void CMenuDView::OnCommand1() { m_fSelected=!m_fSelected; TRACE("command1 selected\n"); } void CMenuDView::OnUpdateCommand1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_fSelected);//决定检查状态 pCmdUI->SetText(m_fSelected?"当前被选中":"当前未被选中");//决定所显示的文字 } void CMenuDView::OnUpdateCommand2(CCmdUI* pCmdUI) {//决定是否为允许 pCmdUI->Enable(m_fSelected); } void CMenuDView::OnCommand2() {//选中时给出提示 AfxMessageBox("你选了command2"); } 接下来再讲一些通过代码操纵菜单的方法,在MFC中有一个类CMenu用来处理和菜单有关的功能。在生成一个CMenu对象时你需要从资源中装如菜单,通过调用BOOL CMenu::LoadMenu( UINT nIDResource )进行装入,然后你就可以对菜单进行动态的修改,所涉及到的函数有:
最后我讲一下如何在程序中弹出一个菜单,你必须先装入一个菜单资源,你必需得到一个弹出菜单的指针然后调用BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL )弹出菜单,你需要指定(x,y)为菜单弹出的位置,pWnd为接收命令消息的窗口指针。当然为了处理消息你应该在pWnd指明的窗口中对菜单命令消息进行映射。 CMenu menu; menu.LoadMenu(IDR_POPUP); CMenu* pM=menu.GetSubMenu(0); CPoint pt; GetCursorPos(&pt); pM->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this); 另一种做法是通过CMenu::CreatePopupMenu()建立一个弹出菜单,然后使用TrackPopupMenu弹出菜单。使用CreatePopupMenu创建的菜单也可以将其作为一个弹出项添加另一个菜单中。下面的伪代码演示了如何创建一个弹出菜单并进行修改后弹出: CMenu menu1,menu2; menu1.CreatePopupMenu menu1.InsertMenu(1) menu1.InsertMenu(2) menu1.InsertMenu(3) menu2.CreatePopupMenu menu2.AppendMenu(MF_POPUP,1,menu1.Detach()) 将弹出菜单加入 or InsertMenu... menu2.InsertMenu("string desc"); menu.TrackPopupMenu(...) 11月25日 MFC中TAB CONTROL的使用例子(转载)1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab Control 控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl 2、创建两个新的对话框资源,其属性作如下修改: Border:none //边界为空,这样它就没了标题栏 Style :Child // 这样这个模板就可以当作另一个窗口的子窗口了。 其它如果没有必要,就不用改了。 在上面加一些控件什么的,具体操作跟普通对话框没有区别。 完成后从这两个对话框模板生成两个新的对话框类。 3、在主对话框中为新添加进来的两个类增加两个变量: 如:CDialog1 m_mm1; CDialog2 m_mm2; 4、在主对话框的OnInitDialog()函数中添加如下类似的代码: TCITEM item; item.mask = TCIF_TEXT; item.pszText = "第一页"; m_tabctrl.InsertItem (0,&item); item.pszText ="第二页"; m_tabctrl.InsertItem (1,&item); m_mm1.Create (IDD_DIALOG1,&m_tabctrl); m_mm2.Create (IDD_DIALOG2,&m_tabctrl); m_mm1.SetWindowPos (NULL,10,30,400,100,SWP_SHOWWINDOW); m_mm2.SetWindowPos (NULL,10,30,400,100,SWP_HIDEWINDOW ); 解释如下: 两个InsertItem函数的调用是为了给标签控件增加两个标签页面,文本是标题。 SetWindowPos()函数设置这两个对话框在Z顺序中的位置,显示或隐藏状态.。 5、在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个操作。 在事件处理中添加如下代码,如下例: void CtabdialogDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult) { CRect r; m_tabctrl.GetClientRect (&r); switch(m_tabctrl.GetCurSel()) { case 0: m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW); m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW ); break; case 1: m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW); m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW ); break; } *pResult = 0; } 要想知道用户选择那个标签页,要通过m_tabctrl.GetCurSel() 函数。为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面的尺寸。 或者: m_Tab.InsertItem(0,"第一页"); m_Tab.InsertItem(1,"第二页"); m_Tab.InsertItem(2,"第三页"); m_Tab.InsertItem(3,"第四页"); m_PageA.Create(IDD_PROPPAGE_A,&m_Tab); m_PageB.Create(IDD_PROPPAGE_B,&m_Tab); m_PageC.Create(IDD_PROPPAGE_C,&m_Tab); m_PageD.Create(IDD_PROPPAGE_D,&m_Tab); m_PageA.ShowWindow(SW_SHOW); m_PageB.ShowWindow(SW_HIDE); m_PageC.ShowWindow(SW_HIDE); m_PageD.ShowWindow(SW_HIDE); 11月10日 纪念贴 公告
谨以此贴,纪念我经过崎岖坎坷的道路,终于使STAREAST开发板成功启动出BOOTLOADER!!!!!!!!!!!!!
这个成功离不开学长前辈们给我的帮助,在此对他们表示感谢.
=L.A=mhtz
2006年11月10日于SJTU电院群楼 |
|
|