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

📄 9925.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:
  4、在Moudle 1中编写函数。
  Function RegOpenKey(ByVal hKey As Long, ByVal lpszSubKey As String,
phkResult As Long) As Boolean
   Dim lResult As Long
   On Error GoTo 0 ' 关闭错误陷阱
   lResult = OSRegOpenKey(hKey, lpszSubKey, phkResult)
   If lResult = 0 Then
   RegOpenKey = True
   Else
   RegOpenKey = False
   End If
  End Function
  Function RegSetStringValue(ByVal hKey As Long, ByVal strValueName As String,
ByVal strData As String, Optional ByVal fLog) As Boolean
   Dim lResult As Long
   On Error GoTo 0
   lResult = OSRegSetValueEx(hKey, strValueName, 0&, REG_SZ, ByVal strData, 
LenB(StrConv(strData, vbFromUnicode)) + 1)
   If lResult = 0 Then
   RegSetStringValue = True
   Else
   RegSetStringValue = False
   End If
  End Function
  Function StripTerminator(ByVal strString As String) As String
   Dim intZeroPos As Integer
   intZeroPos = InStr(strString, Chr$(0))
   If intZeroPos > 0 Then
  StripTerminator=Left$(strString, intZeroPos - 1)
   Else
   StripTerminator = strString
   End If
  End Function
  Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String,
strData As String) As Boolean
   Dim lResult As Long
   Dim lValueType As Long
   Dim strBuf As String
   Dim lDataBufSize As Long
   RegQueryStringValue = False
   On Error GoTo 0
   lResult = OSRegQueryValueEx(hKey, strValueName, 0&, lValueType, ByVal 0&, 
lDataBufSize)
   If lResult = ERROR_SUCCESS Then
   If lValueType = REG_SZ Then
   strBuf = String(lDataBufSize, “”)
   lResult = OSRegQueryValueEx(hKey, strValueName, 0&, 0&, ByVal strBuf, 
lDataBufSize)
   If lResult = ERROR_SUCCESS Then
   RegQueryStringValue = True
   strData = StripTerminator(strBuf)
   End If
   End If
   End If
  End Function
  5、双击Command1,编写Click事件代码。
  Private Sub Command1_Click()
   Dim hKey As Long
   Dim MyReturn As Long
   Dim MyData As String
   MyReturn = OSRegOpenKey(HKEY_CLASSES_ROOT, “.exc”, hKey)
  MyReturn=RegQueryStringValue(hKey,“”,MyData)
  MyReturn=OSRegOpenKey(HKEY_CLASSES_ROOT, MyData+“\shell\open\command”,hKey)
   MyReturn = RegSetStringValue(hKey,“”,“c:\visio.exe 1%”, False)
   If MyReturn Then
   MsgBox “改变文件打开方式成功!”,vbInformation,“请注意”
   Else
   MsgBox “改变文件打开方式失败!”,vbExclamation,“请注意”
   End If
   OSRegCloseKey (hKey)
  End Sub
  6、按F5运行程序,在简体中文Windows95/NT/98、VB5.0/6.0环境中调试通过。
  ㈡利用Delphi编程
  1、在Delphi3.0 IDE中,新建工程Project1,在Form1上添加按钮Button1。
  2、在uses子句中添加Registry。
  3、双击Button1,编写Click事件代码。
  procedure TForm1.Button1Click(Sender: TObject);
  var
   MyRegistry : TRegINIFile;
   Return:string;
  begin
   try
   MyRegistry := TRegINIFile.Create(`');
  MyRegistry.RootKey := HKEY_CLASSES_ROOT;
   Return:=MyRegistry.ReadString (`.gid',`',`No! Not Found the Key!');
   MyRegistry.WriteString(Return,`',`这只是一个演示!');
   MyRegistry.WriteString(Return+`\DefaultIcon',`',`c:\visio.exe,1');
   MyRegistry.WriteString(Return+`\shell\open\command',`',`c:\visio.exe %1'); 
   finally
   MyRegistry.Free;
   end;
   ShowMessage(`改变文件打开方式成功!');
  end;
  4、按F9运行程序,在简体中文Windows95/NT/98、Delphi3.0/4.0环境中
调试通过。
  
****************************************************************
     
                 Visual Basic控制与Visual C++开发 

                青岛建筑工程学院(266033) 吴曼 曾魁 

Visual Basic 是一个易于掌握,方便灵活的 Windows可视化开发系统, 开放性
是它的一个重要特点,可通过Visual Basic 控制来实现对Basic 语言的扩充。
Visual Basic 控制既可以由Microsoft公司提供,也可以由其他软件开发者提
供,如同利用封装了一些成员函数和数据成员的C++ 对象一样,为开发者提供许
多方便。另外在界面设计中,许多三维Visual Basic 控制可方便地美化界面,
节省大量开发工作。Visual C++ 的基础类库MFC提供CVBC ontrol 类,支持
Visual Basic 控制,其AppStudio 支持Visual Basic 控制的使用和其属性的
设置。另外Visual C++的 Class Wizard 也支持Visual Basic 控制的消息框
架代码自动生成,为Visual C++开发者使用Visual Basic 控制提供了极大的方
便。 

可以把调用的Visual Basic 控制看成一个非常灵活的窗口,一些控制可以接收
输入,但所有的控制都提供一些可见的输出。常用于描述Visual Basic 控制的
概念是"方法","属性 " 和"事件"。Visual Basic 控制的"方法"与C++类成员
函数非常类似,但这些方法被限制在预先定义好的集合之内。其中大多包括
Ad-dItem,RemoveItem,Move和Refresh。Visual Ba sic 控制的属性相当于C++
类数据成员,每一个Visual Basic控制都可以定义自己的属性集合。Visual C++
的CVBControl 类成员函数GetFloatProperty, GetNumProperty,
GetPictureProper-ty,GetStrProperty分别可用于获得Visual Basic 控制的
浮点属性值,整数属性值,图形属性值,字符串属性值。标准 Visual Basic 控
制作为对事件的反应,会向对话框发送通知消息。在AppStudio中(假设已选中
一个对话框)使用ClassWiz-ard,能自动在程序的主模块中产生对
AfxRegisterVBXEvent的调用。登记一个指定名字的VB事件并返回一个识别此
事件的单元,此函数通常使用一全程初始程序为信息映射定义VB事件。在主模
块头文件中应包含相应的 extern 语句。例如我们在使用GRID控制中的
SelChange事件,那么 Cla ss Wizard 会产生类似如下的消息入口代码:在类
头文件中原型声明afx_msg void OnSe lChangeGrid(UINT, int, CWnd*, LPVOID); 
通过以下消息映射宏将函数和应用框架联系在一起: 

BEGIN_MESSAGE_MAP(CGridEntry, CFormView) 
ON_VBXEVENT(VBN_SELCHANGE, IDC_GRID, OnSelChangeGrid) 
END_MESSAGE_MAP() 

并在主程序模块头文件中生成: extern UINT NEAR VBN_SELCHANGE; 
在主程序模块CPP文件中生成: 
UINT NEAR VBN_SELCHANGE= AfxRegisterVBEvent("SELCHANGE"); 
由于这些代码是借助工具产生的,在Visual C++中使用VB控制是方便 
有力的。下面主要谈谈在利用Visual C++ 基础类库开发编程中使用 
Visual Basic 控制的几个技巧: 

界面功能 

在VB 3.0 专业版中提供了一组三维Visual Basic 控制,在AppStudio中通过
File\Inc lude Controls命令装入 VB 3.0的控制后,便在AppStudio 工具箱
上添加了一些新的控制, 均可在对话框中使用,其中常用于界面设计的有以下
几个方面。 

Gange Control (标尺度量控制) 

类似于滚动条,可在界面设计中设置度量数据变化状态并显示,可作为一种动
态显示方式替代滚动条。它通过picture属形显示不同的图形,如表盘形状态,
温度计形状等。通过指针运动比较形象地显示数据的变化情况。 

三维旋钮(spin button control) 

该旋钮可作二维显示,也可作三维显示。用于替代滚动操作数据的输入及控制
数据的变化。它不同于标尺度量控制,必须依靠与其他控制联系起来共同对数
据进行控制和显示。 

键盘状态控制(key status control) 

该控制用于在应用程序的窗口中显示capslock,unlock,ins,scrolllock 的状态。 

三维控制 3D control 

VB三维控制提供了界面设计的立体效果,利用这些三维控制可很容易地制作出具
有艺术效果的三维外观图形用户界面。其中三维检查框,单选钮和框架,类似于
二维的属性,只有一些三维字体及阴影,网格及颜色等属性,提供给用户直接在属
性窗口中设计其三维外观并观察其效果。 

改造Visual Basic 控制实例: 

1.GRID 控制 

GRID 控制包含一个可寻址单元的矩形阵列,程序设置其行列数及初始值,并且负
责从各个单元存取数据。运行时只能通过鼠标来选择一个或一组单元。由于用
户不能直接往单元上输入数据,与其说GRID是一种输入控制,不如说它是一种输
出控制。在Visual C++ 中对G RID控制进行改造,并封装于一个CEntryGrid类中,
实现类似电子表格一样的,可直接往单元中输入数据和键盘方向键控制单元焦点
转移等操作。GRID控制除了能够支持大多数标准Vi sual Basic控制的属性、事
件和方法之外,还具有一些独特的属性和事件,本篇中所用到的事件和属性如下: 

Col ( Row ) 数值属性,当前列(行) 
Cols ( Rows ) 数值属性,总列(行)数 
ColWidth ( RowHeigtht ) 数值(索引)属性,用逻辑twip 表示的列宽度(行高度) 
FixedCols ( FixedRows ) 数值属性,固定列(行)数 
Text 字符串属性,由Col 和Row所表示单元中的字符串 
SelStartCol ( SelEndCol ) 数值属性,选择起始(终止)列 
SelStartRow ( SelEndRow ) 数值属性,选择起始(终止)行 
SelChange事件, 当用户选中一个新的单元时,负责通知程序 
RowColChange 事件, 当单元的当前行列号改变时,负责通知程序 

2. CMyEdit 类: 

CMyEdit window 移动窗口类是CEdit的派生类,完成过滤所需的键盘信息给GRID
控制,其成员函数 ProcessKeys(UINT nChar) 先获取 GRID 控制的行列信息,再
根据nChar表示的键盘信息 ,相应地移动GRID 控制的单元焦点,这是CMyEdit类的
核心功能函数。重载了的成员函数 O nGetDlgCode()为编辑窗口选择一种特定种
类的输入风格:DLGC_WANTALLKEYS(接收所有的键盘输入)。成员函数OnKeyDown实
现当非系统键被按下时,过滤上下方向键 信息。成员函数 OnChar通过调用
ProcessKeys实现完成过滤所需的键盘信息给GRID控制。CMyEdit 类定义如下: 

class CMyEdit : public CEdit 
{ 
public: 
BOOL ProcessKeys(UINT nChar); 
protected: 
afx_msg UINT OnGetDlgCode(); 
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); 
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); 
DECLARE_MESSAGE_MAP() 
}; 
//框架消息映射的实现 
BEGIN_MESSAGE_MAP(CMyEdit, CWnd) 
ON_WM_GETDLGCODE() 
ON_WM_KEYDOWN() 
ON_WM_CHAR() 
END_MESSAGE_MAP() 
UINT CMyEdit::OnGetDlgCode() 
{ 
return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS; 
} 
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{ 
if (nChar == VK_UP || nChar == VK_DOWN) 
ProcessKeys(nChar); 
else 
CEdit::OnKeyDown(nChar, nRepCnt, nFlags); 
} 
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{ 
if (!ProcessKeys(nChar)) 
CEdit::OnChar(nChar, nRepCnt, nFlags); 
} 
BOOL CMyEdit::ProcessKeys(UINT nChar) 
{ 
//本移动窗口和GRID控制都是对话框的子窗口,先获取GRID控制的指针 
CGridEntry* pParent = (CGridEntry*) GetParent(); 
CVBControl* pGrid = pParent->m_pGrid; 
//获取GRID控制的一些状态信息 
int nRow = (int)pGrid->GetNumProperty("Row"); 
int nCol = (int)pGrid->GetNumProperty("Col"); 
int nRows = (int)pGrid->GetNumProperty("Rows"); 
int nCols = (int)pGrid->GetNumProperty("Cols"); 
int nFirstRow = (int)pGrid->GetNumProperty("FixedRows"); 
int nFirstCol = (int)pGrid->GetNumProperty("FixedCols"); 
int nOldCol = nCol; 
switch (nChar) 
{ 
case VK_TAB: 
// Shift + Tab 表示退后一列 
if (GetKeyState(VK_SHIFT) & 0x8000) nCol--; 
else 
nCol++; 
break; 
case VK_RETURN: 
nCol++; 
break; 
case VK_UP: 
nRow--; 
break; 
case VK_DOWN: 
nRow++; 
break; 
default: 
return FALSE; 
} 
if (nCol >= nCols) 
// 移到GRID的右边时换下一行 
{ 
nCol = nFirstCol; 
nRow++; 

⌨️ 快捷键说明

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