当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 需要设置? ......
    摘要: rt ......


当点击最大化时在指定的区域内显示

就象mdi的子窗体一样,其范围最大是填充整个mdi。但我现在不想用mdi实现抱歉,在下孤闻寡yan,不知此想法是否荒谬?是否有代码实现?  
 

NO.1   作者: ch21st

来源:  
  http://vbboshi.myrice.com/vbtech/desktop/page_1/file20.htm  
   
  利用子类处理技术限制窗体的大小    
    *   *   *   *   *   *   *   *   *   *   警告   *   *   *   *   *   *   *   *   *   *   *   *   *  
    对以下代码进行修改将有可能导致不可预料的后果,甚至能使您的VB崩溃!  
    在VB   IDE环境中运行本程序之前请先保存您的修改  
    不要使用断点调试模式,这将导致VB崩溃!  
    *   *   *   *   *   *   *   *   *   *   注意   *   *   *   *   *   *   *   *   *   *   *   *   *  
  模块:  
  Option   Explicit  
   
  Public   OldWindowProc   As   Long  
  Declare   Function   GetWindowLong   Lib   "user32"   Alias   "GetWindowLongA"   (ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long)   As   Long  
  从指定的窗口结构中取得信息  
  参数/类型   说明  
  hwnd(long):   欲为其获取信息的窗口的句柄  
  nIndex(long):   欲取回的信息,可以是下述任何一个常数  
  GWL_EXSTYLE:扩展窗口样式  
  GWL_STYLE:窗口样式  
  GWL_WNDPROC:该窗口的窗口函数的地址  
  GWL_HINSTANCE:拥有窗口的实例的句柄  
  GWL_HWNDPARENT:该窗口之父的句柄.不要用   SetWindowWord   来改变这个值  
  GWL_ID:对话框中一个子窗口的标识符  
  GWL_USERDATA:含义由应用程序规定  
  对话框亦可指定下列常数  
  DWL_DLGPROC:这个窗口的对话框函数地址  
  DWL_MSGRESULT:在对话框函数中处理的一条消息返回的值  
  DWL_USER:含义由应用程序规定  
  Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   (ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
  在窗体结构中为指定的窗口设置信息  
  参数/类型   说明  
  hwnd(long)   欲为其获取信息的窗口的句柄  
  nIndex(long)   参考GetWindowLong函数  
  dwNewLong(long)   由nIndex指定的窗口信息的新值  
  Declare   Sub   CopyMemory   Lib   "kernel32"   Alias   "RtlMoveMemory"   (pDest   As   Any,   pSource   As   Any,   ByVal   ByteLen   As   Long)  
  这就是在VisualBasic中处理指针的"短柄斧"--CopyMemory.你可能在API文档中找不到它,但它确实存在,并且功能异常强大  
  参数/类型   说明  
  pDest   你想写入字节到其中的任何变量的ByRef参数(地址)  
  pSource   要从其中进行复制的ByRef变量  
  ByteLen   要复制的字节数  
  Declare   Function   CallWindowProc   Lib   "user32"   Alias   "CallWindowProcA"   (ByVal   lpPrevWndFunc   As   Long,   ByVal   hwnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
  把控制权传回给原来的窗口过程  
  Public   Const   WM_GETMINMAXINFO   =   &H24  
  Type   POINTAPI  
   x   As   Long  
   y   As   Long  
  End   Type  
    This   is   the   structure   that   is   passed   by   reference(ByRef)(ie   an   address)   to   your   message   handler(消息侦听器)  
    The   key   items   in   this   structure   are   ptMinTrackSize   and   ptMaxTrackSize  
  Type   MINMAXINFO  
   ptReserved   As   POINTAPI  
   ptMaxSize   As   POINTAPI  
   ptMaxPosition   As   POINTAPI  
   ptMinTrackSize   As   POINTAPI  
   ptMaxTrackSize   As   POINTAPI  
  End   Type  
  Public   Function   SubClass1_WndMessage(ByVal   hwnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wp   As   Long,   ByVal   lp   As   Long)   As   Long  
    Watch   for   the   pertinent   message   to   come   in  
   If   Msg   =   WM_GETMINMAXINFO   Then  
    Dim   MinMax   As   MINMAXINFO  
     This   is   necessary   because   the   structure   was   passed   by   its   address   and   there  
     is   currently   no   intrinsic   way   to   use   an   address   in   Visual   Basic  
    CopyMemory   MinMax,   ByVal   lp,   Len(MinMax)  
    This   is   where   you   set   the   values   of   the   MinX,MinY,MaxX,   and   MaxY  
    The   values   placed   in   the   structure   must   be   in   pixels.   The   values  
    normally   used   in   Visual   Basic   are   in   twips.   The   conversion   is   as   follows:  
     pixels   =   twips\twipsperpixel  
    MinMax.ptMinTrackSize.x   =   3975   \   Screen.TwipsPerPixelX  
    MinMax.ptMinTrackSize.y   =   1740   \   Screen.TwipsPerPixelY  
    MinMax.ptMaxTrackSize.x   =   Screen.Width   \   Screen.TwipsPerPixelX   \   2  
    MinMax.ptMaxTrackSize.y   =   3480   \   Screen.TwipsPerPixelY  
    Here   we   copy   the   datastructure   back   up   to   the   address   passed   in   the   parameters  
    because   Windows   will   look   there   for   the   information.  
    CopyMemory   ByVal   lp,   MinMax,   Len(MinMax)  
    This   message   tells   Windows   that   the   message   was   handled   successfully  
    SubClass1_WndMessage   =   1  
    Exit   Function  
   End   If  
    Here,   we   forward   all   irrelevant   messages   on   to   the   default   message   handler.  
   SubClass1_WndMessage   =   CallWindowProc(OldWindowProc,   hwnd,   Msg,   wp,   lp)  
  End   Function  
   
  窗体代码:  
  Option   Explicit  
   
  Private   Const   GWL_WNDPROC   =   (-4)  
  Private   Sub   Form_Load()  
    First,   we   need   to   store   the   address   of   the   existing   Message   Handler  
   OldWindowProc   =   GetWindowLong(Me.hwnd,   GWL_WNDPROC)  
    Now   we   can   tell   windows   to   forward   all   messages   to   out   own   Message   Handler  
   Call   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   AddressOf   SubClass1_WndMessage)  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
    We   must   return   control   of   the   messages   back   to   windows   before   the   program   exits  
  Call   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   OldWindowProc)  
  End   Sub    
   
   
   
  =============================  
  我歌月徘徊,我舞影零乱。醒时同交欢,醉后各分散。   永结无情游,相期邈云  
  汉。  
 


 ·xtragrid suite是什么    »显示摘要«
    摘要: 请问有什么用?当例子用吗? ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE