⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9922.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:
class CSimpleBrowseView : public CView/*CListView*/
{
...
// Attributes
public:
    CThumbListCtrl m_ThumbListCtrl;  // use thumb list control
// Operations
public:
    void FormatList(CString csPath);

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CSimpleBrowseView)
    protected:
    virtual void OnInitialUpdate(); // called first time after construct
    //}}AFX_VIRTUAL
...
// Generated message map functions
protected:
    //{{AFX_MSG(CSimpleBrowseView)
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnSize(UINT nType, int cx, int cy);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
...
};

  (1)将其父类由CListView改为CView,原因和上面的类似。
  (2)加入CThumbListCtrl类的成员变量m_ThumbListCtrl,文件列
表的具体内容就是由它实现的。
  (3)增加消息响应函数OnCreate(),在其中把m_ThumbListCtrl创
建起来,并初始化为缩图显示风格。
  (4)增加消息响应函数OnSize(),使m_ThumbListCtrl总是占满
CSimpleBrowseView的区域。
  (5)在OnInitialUpdate()中创建文件列表的栏目,调用
CThumbListCtrl::BuildColumns()。
  (6)增加函数FormatList(),它被CLeftView::OnSelchanged()调
用,它则转而调用CThumbListCtrl::BrowseFolder()。点击左边的目
录树,右边的文件列表跟着改变,就是通过这一个函数来实现的。

  具体修改请看源文件simplebrowseview.h和
simplebrowseview.cpp,都很简单。

  3.其它事项CShellTree和CThumbListCtrl都是在MFC扩展类库中
实现的,要使用它们,必须:在编译阶段要有相应的.h文件,在连接
阶段要有相应的.lib文件,在运行阶段要有相应的.dll文件。因此还
要做一些配置:在leftview.h中加入#include "ShellTree.h",在
simplebrowseview.h中加入#include "ThumbListCtrl.h";选菜单项
Project->Settings,转到Link面板,在Object/library modules中加
入CJ60Lib.lib和thl.lib;将CJ60Lib.dll,thl.dll和
simplebrowse.exe放在同一目录下,注意thl.dll又使用到其它dll如
Convert20.dll,JPEG.dll,TIFF60.dll等,也要放在同一目录下。

  第五步:编译、运行Rebuild All,Execute SimpleBrowse.exe,
一款简洁实用的图片浏览器浮出水面...大功告成!

  制作心得:

  我对这款图片浏览器的评价是:简洁,实用,值得一玩。

  说其简洁,是因为我编写的代码不超过100行,调用的函数不超
过10个。这得归功于CJ60Lib.dll和thl.dll,它们都内置有强大的功
能,而外壳封装却十分简单。

  说其实用,是因为这款图片浏览器实现了图片浏览的基本功能,
缩图相当好看,浏览速度够快,能浏览的图片格式也挺多。

  用不超过100行的代码就搞出了这么一款简洁实用的图片浏览器,
DIY,乐趣无穷!

  有兴趣的朋友,可到泰来公司网站www.thalia.com.cn下载
SimpleBrowse及其源码。 

***********************************************************

                   如何在VC5中控制工具条的停靠位置

                              辽宁 宋立波

  在VC5 中开发大型应用程序时,工具条通常是程序中必不可少的重要
功能因素,其中工具条在整个窗口中的停靠位置尤其关键,它直接影响到
程序界面的外观形象。下面针对笔者实际开发中各类工具条停靠位置的控
制过程,详细阐述其实现技巧。
  一、标准工具条停靠位置的控制
  VC5 应用程序向导生成的框架代码中,都具有普通工具条的控制方法。
正常情况下工具条类CToolBar是控制条类CControlBar 的派生类,其显示
的初始停靠位置是通过调用继承的函数CControlBar::EnableDocking(DWORD dwStyle)
来确定的,其参数dwStyle用来指定停靠具体位置,与本文有关的风格如下
(其余请参阅VC5的联机文档):
  CBRS_ALIGN_TOP 停靠在框架窗口客户区域顶部
  CBRS_ALIGN_BOTTOM 停靠在框架窗口客户区域底部
  CBRS_ALIGN_LEFT 停靠在框架窗口客户区域左边
  CBRS_ALIGN_RIGHT 停靠在框架窗口客户区域右边
  CBRS_ALIGN_ANY 停靠在框架窗口客户区域任何位置
  在利用应用程序向导AppWizard 生成的应用程序中,其控制代码默认
的停靠位置控制风格为CBRS_ALIGN_ANY,即允许停靠在框架窗口客户区域
的任何边上。工具条在正常显示时为停靠在窗口客户区域的顶部,控制指
令为EnableDocking(CBRS_ALIGN_ANY)或m_wndToolBar
  。EnableDocking(CBRS_ALIGN_ANY) ,注意,在实际程序控制时前者
必须处于所有其它控制代码的前面,否则浮动工具条或特殊工具条等部分
代码可能无法奏效。具体控制方法请参考利用应用程序向导生成的任何一
个程序实例的框架代码部分中的建立函数ONCREATE()。
  应用程序的单文档和多文档的窗口框架类均为CFrameWnd 的派生类,
其指定工具条的停靠位置均是通过调用继承的函数
CFrameWnd::EnableDocking(DWORD dwDockStyle)来实现的,其可选的参数
除上述五种之外,还增加了CBRS_FLOAT_MULTI参数,这个参数主要是为设
计浮动工具条而增加的,其用来确定一个框架窗口中允许存在多个浮动工
具条。同样,利用应用程序向导AppWizard 生成的应用程序,其默认的停
靠位置也是CBRS_ALIGN_ANY,即允许工具条停靠在框架窗口的任何边上,
其默认的初始位置为框架窗口的顶部,即为EnableDocking(CBRS_ALIGN_ANY)
或m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY)。
  二、浮动工具条停靠位置的控制
  如果在一个框架窗口中存在多个标准或浮动工具条时,需要利用函数
void DockControlBar(CControlBar *pBar,UINT nDockBarID=0,LPCRECT lpRect= NULL)
来确定要控制停靠位置的工具条,它也是CFrameWnd类的成员函数,其中
参数pBar用来指向被控制停靠位置的工具条对象指针,参数nDockBarID用
来确定工具条停靠在框架窗口的哪条边上,其控制风格的具体取值为:
  AFX_IDW_DOCKBAR_TOP 停靠在框架窗口的顶部
  AFX_IDW_DOCKBAR_BOTTOM 停靠在框架窗口的底部
  AFX_IDW_DOCKBAR_LEFT 停靠在框架窗口的左边
  AFX_IDW_DOCKBAR_RIGHT 停靠在框架窗口的右边
  当参数nDockBarID的取值为0时,则工具条可以停靠在框架窗口中的
任何一个可停靠的边上,其默认的初始位置为窗口顶部。
  三、并列工具条停靠位置的控制
  很多大型应用程序中都存在这样的工具条,将多个工具条同时并列停
靠在某窗口的某一条边上。对于这种停靠方法,利用上述工具条控制函数
DockControlBar的lpRect参数,通过控制工具条的停靠矩形区域的方法可
以实现。如笔者实现的函数如下:
  (一)在实现文件MainFrm.h中增加如下成员函数定义
  void DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf);
  (二)在实现文件MainFrm.cpp中增加如下成员函数
  void CMainFrame::DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf)
   { //设置工具条并列停靠在同一条边上
   CRect rect; //矩形区域定义
   DWORD dw;
   UINT n=0;
   RecalcLayout();//重新显示
   LeftOf->GetWindowRect(&rect);
   rect.OffsetRect(1,0);//设置偏移值以停靠在同一边上
   dw=LeftOf->GetBarStyle();
   n=(dw&CBRS_ALIGN_TOP)?AFX_IDW_DOCKBAR_TOP:n;
   n=(dw&CBRS_ALIGN_BOTTOM&&n==0)?AFX_IDW_DOCKBAR_BOTTOM:n;
   n=(dw&CBRS_ALIGN_LEFT&&n==0)?AFX_IDW_DOCKBAR_LEFT:n;
   n=(dw&CBRS_ALIGN_RIGHT&&n==0)?AFX_IDW_DOCKBAR_RIGHT:n;
   DockControlBar(Bar,n,&rect);
   }
  在这个函数中应注意对RecalcLayout()函数和OffsetRect()函数的调用,
前一个函数用来重新显示被调整的客户区和工具条,后一个函数用来重新确
定矩形区域,这相当于利用鼠标将第二个工具条窗口拖动到前一个工具条上
然后释放。
  (三)修改应用程序建立函数OnCreate()中的相应DockControlBar()函
数为DoctControlBarOf()函数,并正确设置工具条对象的指针,如笔者实现
程序中的控制代码如下:
  EnableDocking(CBRS_ALIGN_ANY);//停靠位置必须在最前面
   ......//工具条建立函数
   m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
   m_wndTestToolBar.EnableDocking(CBRS_ALIGN_ANY);
   DockControlBar(&m_wndToolBar,AFX_IDW_DOCKBAR_TOP);
   //使两个工具条并列停靠
   DockControlBarLeftOf(&m_wndTestToolBar,&m_wndToolBar);
  四、工具条顶部停靠位置的控制
  工具条的最后一种停靠位置控制方法是,如何控制定制工具条的停靠位
置,如具有通用控制功能工具条的停靠位置等。这主要实现左右两侧定制工
具条与顶部工具条之间谁靠近框架窗口边的位置关系。如笔者实现程序中的
控制步骤如下:
  (一)打开菜单资源增加顶部位置控制菜单项IDD_DLGBARTOP;
  (二)在实现文件MainFrm.h中增加成员控制变量m_bDialogTop;
   BOOL m_bDialogTop;
   并在构造函数中为其设置初始值;
  (三)利用类向导ClassWizard为菜单项设置响应函数;
  (四)在实现文件MainFrm.cpp中通过充分利用SetWindowPos( )成员完
善消息映射功能。
   void CMainFrame::OnButtonDlgbartop()
   { //定制工具条顶部位置控制函数
   if (m_bDialogTop) m_wndDlgBar.SetWindowPos(
   &m_wndStatusBar,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
   //顶部工具条停靠在窗口边,左右工具条停靠其下
   else m_wndDlgBar.SetWindowPos(&wndTop,0,0,0,0,
   SWP_NOSIZE|SWP_NOMOVE);//停靠在最顶部
   RecalcLayout(); //重新显示窗口
   m_bDialogTop=!m_bDialogTop;//改变变量标志
   }
   void CMainFrame::OnUpdateButtonDlgbartop(CCmdUI* pCmdUI)
   { //设置菜单项检查状态更新函数
   pCmdUI->SetCheck(m_bDialogTop);
   }
  这样,就可以利用菜单项来控制定制工具条的顶部停靠位置。
                  
***********************************************************

                   如何在VB中判断Windows9x的运行模式

                         创意软件工作室 植国贤

  在Windows下编程,经常发现有不少功能Windows系统已经做了,如果能
够直接调用,就可省去不少程序的编写,并能提高程序的运行效率。在很多
情况下,我们都可以用“Ctrl + X”、“Ctrl + C”、 “Ctrl + V”和
“Ctrl + Z”分别进行“剪切”、“复制”、“粘贴”和“撤消”操作,
由此想到,如果我们能够在程序中调用系统的这些功能,就无需为如何实现
这些操作而操心了。经过不断的探索,终于发现SendMessage和PostMessage
能够担此重任,真是如获至宝,于是迫不及待地把它们介绍给各位朋友。
  用VB5的“API浏览器”可以很容易地找到这两个API 函数:
  Declare Function SendMessage Lib “user32” Alias 
“SendMessageA” _(ByVal hwnd As Long, ByVal wMsg As Long, 
ByVal wParam As Long, _lParam As Any) As Long
  Declare Function PostMessage Lib “user32” Alias 
“PostMessageA” _(ByVal hwnd As Long, ByVal wMsg As Long, 
ByVal wParam As Long, _ByVal lParam As Long) As Long
  这两个函数的功能几乎是一样的,只是SendMessage是直接调用Windows
函数来发送消息,只有这个消息完全被处理后此函数才返回,而PostMessage
则给窗体的消息队列增加一个消息,这个消息将在未来某个时候进行正常事
件处理时得到处理。以下仅以SendMessage为例。
  函数中虽然有四个参数,但关键的是前两个:hwnd 和wMsg。Hwnd是句柄,
Microsoft Windows应用程序中的每个窗体和控件都拥有一个句柄,通过句柄
可以指明函数的操作对象;wMsg是一个十六进制数,代表了函数要发送的具
体消息。
  下面以具体例子说明如何用SendMessage实现“剪切”、“复制”、“粘
贴”、“撤消” 和“删除”功能:
  在窗体中放置一个文本框Text1和五个按钮,分别执行以上五种功能,编
写以下程序。
  Option Explicit
  Private Declare Function SendMessage Lib “user32” Alias 
“SendMessageA” _(ByVal hwnd As Long, ByVal wMsg As Long, 
ByVal wParam As Long, _lParam As Any) As Long
  Const WM_CUT = &H300
  Const WM_COPY = &H301
  Const WM_PAST = &H302
  Const WM_CLEAR = &H303
  Const WM_UNDO = &H304
  Dim fb As Long
  
  Private Sub cmdClear_Click()
   fb = PostMessage(Text1.hwnd, WM_CLEAR, 0, 0)
  End Sub
  Private Sub cmdCopy_Click()
   fb = SendMessage(Text1.hwnd, WM_COPY, 0, 0)
  End Sub
  Private Sub cmdCut_Click()
   fb = SendMessage(Text1.hwnd, WM_CUT, 0, 0)
  End Sub
  Private Sub cmdPast_Click()
   fb=SendMessage(Text1.hwnd, WM_PAST, 0, 0)
  End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -