📄 9909.txt
字号:
{
DeleteObject(DarkGrayPen);
DeleteObject(LightGrayPen);
DeleteObject(WhitePen);
DeleteObject(BlackPen);
DeleteObject(LightGrayBrush);
DeleteObject(BlueBrush);
DeleteObject(NullBrush);
}
void TNewDialog::CreateDrawObject(void)
{
DarkGrayPen = (HPEN)CreatePen(
PS_SOLID,1,RGB(128,128,128));
LightGrayPen= (HPEN)CreatePen(
PS_SOLID,1,RGB(192,192,192));
WhitePen = (HPEN)GetStockObject(WHITE_PEN);
BlackPen = (HPEN)GetStockObject(BLACK_PEN);
LightGrayBrush = (HBRUSH)GetStockObject( LTGRAY_BRUSH);
NullBrush = (HBRUSH)GetStockObject(
NULL_BRUSH);
LOGBRUSH lb;
lb.lbStyle = BS_SOLID;
lb.lbColor = RGB( 0, 0, 128);
lb.lbHatch = NULL;
BlueBrush = CreateBrushIndirect(&lb);
}
void TNewDialog::WMActivate(RTMessage Msg)
{
if(Msg.WParam==WA_ACTIVE ||
Msg.WParam==WA_CLICKACTIVE)
DrawFrame();
}
void TNewDialog::WMNCPaint(RTMessage )
{ DrawFrame(); }
void TNewDialog::DrawFrame()
{
RECT rWinRect;
HDC hWinDC;
LONG DLGStyle;
HPEN oldPen;
HBRUSH oldBrush;
int r,b;
hWinDC = GetWindowDC(HWindow);
G etWindowRect(HWindow,&rWinRect);
r = rWinRect.right-rWinRect.left-1;
b = rWinRect.bottom-rWinRect.top-1;
oldPen = (HPEN)SelectObject(
hWinDC,DarkGrayPen);
oldBrush=(HBRUSH)SelectObject(
hWinDC,NullBrush);
Rectangle(hWinDC,0,0,r,b);
SelectObject(hWinDC,BlueBrush);
Rectangle(hWinDC,5,4,r-4,24);
SelectObject(hWinDC,BlackPen);
MoveTo(hWinDC,0,b);
LineTo(hWinDC,r,b);
LineTo(hWinDC,r,-1);
SelectObject(hWinDC,WhitePen);
MoveTo(hWinDC,1,b-2);
LineTo(hWinDC,1,1);
LineTo(hWinDC,r-1,1);
MoveTo(hWinDC,r-5,5);
LineTo(hWinDC,r-5,23);
LineTo(hWinDC,4,23);
SelectObject(hWinDC,LightGrayPen);
SelectObject(hWinDC,NullBrush);
Rectangle(hWinDC,2,2,r-1,b-1);
Rectangle(hWinDC,3,3,r-2,b-2);
Rectangle(hWinDC,4,4,r-3,b-3);
SelectObject(hWinDC,DarkGrayPen);
MoveTo(hWinDC,5,4);
LineTo(hWinDC,r-4,4);
DLGStyle = GetWindowLong(HWindow,
GWL_STYLE);
if(DLGStyle & WS_SYSMENU) {
SelectObject(hWinDC,LightGrayPen);
SelectObject(hWinDC,LightGrayBrush);
Rectangle(hWinDC,6,5,24,23);
SelectObject(hWinDC,BlackPen);
SelectObject(hWinDC,NullBrush);
Rectangle(hWinDC,8,12,21,15);
SelectObject(hWinDC,WhitePen);
MoveTo(hWinDC,9,13);
LineTo(hWinDC,20,13);
SelectObject(hWinDC,DarkGrayPen);
MoveTo(hWinDC,9,15);
LineTo(hWinDC,21,15);
LineTo(hWinDC,21,12);
}
SelectObject(hWinDC,oldPen);
SelectObject(hWinDC,oldBrush);
ReleaseDC(HWindow,hWinDC);
}
*****************************************************
VB4.0为应用程序创建快捷方式
一般来说,软件在安装时都会创建一个快捷方式来方便用户使用,我们也可
为自己的应用程序在桌面上创建一个快捷方式。安装Microsoft Visual Basic 4.0
后,将会有一个Setup Kit工具,其所带的STKIT432.DLL文件中提供了一个API函数
fCreateShellLink可供用户来为应用程序创建快捷方式。下来举例说明其使用方法。
在这里我们为NOTEPAD创建一个快捷方式。
1、在VB4.0中打开一个新工程文件,在FORM1上添加一个命令按钮Command1。
2、双击窗体,在General Declarations中输入下面代码:
Private Declare Function fCreateShellLink Lib ″STKIT432.DLL"″(ByVal_lpstrFolderName As
String,ByVal lpstrLinkName As String,ByVal_lpstrLinkPath As String,ByVal lpstrLinkArgs As
String) As Long
3、双击Command1命令按钮,写如下代码:
Sub Command1_Click()
Dim lReturn As Long
lReturn=fCreateShellLink(″..。.\Desktop″,_″快捷方式Notepad″,″c:\win95\notepad.exe″,″″)
lReturn=fCreateShellLink(″″,″快捷方式Notepad″,_″c:\\win95\notepad.exe″,″″)
lReturn=fCreateShellLink(″\startup″,″快捷方式Notepad″,_″c:\win95\notepad.exe″,″″)
End Sub
4、按F5运行,单击命令按钮command1,如果没有输入错误的话,桌面上就会出现
NOTEPAD的快捷方式。
运行环境:VB4.0(32),中文WINDOWS95。
*****************************************************
模拟键盘输入实现程序的自动演示
(安徽 王翼)
许多优秀的软件都有出色的DEMO(演示)功能,给人留下深刻的印象。DEMO程序或
许多CAI(计算机辅助教学)软件经常需要模拟键盘输入所需的文件名,来实现程序的
自动运行。要实现键盘的模拟输入,必须了解键盘缓冲区的结构及相应编程机理。键
盘缓冲区在内存中的地址分配如下:
004:001AH0040:001BH存放键盘缓冲区首指针;
004:001CH0040:001DH存放键盘缓冲区尾指针;
004:001AH0040:001BH键盘缓冲区,存放击键字符。
每次击键用2字节存放。若为功能键,则第一个字节为0,第二个字节为该键的扩
展码;若为普通键,则第一个字节为该健的ASCCII码,第二字节为0。每击一次键,
数据送入键盘缓冲区中尾指针指向的单元,同时尾指针加2;从键盘缓冲区读出键时,
数据从缓冲区队列中首指针指示的单元取出,首指针同时加2。若首尾指针相等,表
示缓冲区为空。要实现对键盘缓冲区的自动操作,这里利用C语言的对内存直接读库
函数peek()和对内存直接写函数pokeb(),从而实现模拟键盘输入功能。
程序中的关键函数是keyboard(int choice,char key[]),若choice参数不为0,
则key字符串中的字符的ASCII码逐个送入键盘缓冲区;如果choice参数为0,则将功
能键的扩展码送键盘缓冲区主程序运行后,如果5秒钟内不通过键盘输入所需的文件
名,则调用keyboard函数利用模拟键盘输入功能输入bar3d.c(CR),由此实现程序自
动运行。
程序在P133多媒体机上采用Turbo C 2.0编译连接通过,运行正常。
/*filename:demo-kbd.c*/
/*模拟键盘输入使程序自动运行 */
#include<stdio.h>
#include<conio.h>
#include<dos.h>
keyboard(int choice,char key[])
{
int offset,i;
offset=peek(0x40,0x1c);
for(i=0;key[i]!='';i++)
{
if(choice==0)
{
pokeb(0x40,offset,0x00);
pokeb(0x40,offset,key[i]);
}
if(choice!=0)
{
pokeb(0x40,offset,key[i]);
pokeb(0x40,offset+1,0x00);
}
offset=offset+2;
if(offset==0x3e)offset=0x1e;
}
pokeb(0x40,0x1c,offset);
}
main()
{
struct time tt;
char name[10];
int t,t1,t2,flag=0;
gettime(&tt);
t1=tt.ti_sec;
printf("input files name");
while(!kbhit())
{
gettime(&tt);
t2=tt.ti_sec;
t=t2-t1;
if(t>5)
{
flag=1;
break;
}
}
if(flag==1)keyboard(1,"mljp.c\x0D");
gets(name);
printf("\s",name);
}
*****************************************************
绘制花瓣图形的小程序
下面是利用MS-DOS 6.22的QBASIC语言编写的绘制花瓣图形的小程序,只
要输入花瓣数量N值(建议N值取为3-8),即可在屏幕上绘制出相应的花瓣图形。
CLS
INPUT ″N=″,N
SCREEN2:KEY OFF:CLS
P=3.14159
FOR A=0 TO 2*P STEP P/360
E=100*(1+SIN(N*A))
X=320+E*COS(A):X1=320+E*COS(A+P/5)
Y=100+E*SIN(A)/2:Y1=100+E*SIN(A+P/5)/2
LINE(X,Y)-(X1,Y1)
NEX T A
END
*****************************************************
<疑难杂症>
问题001
小弟是vb初学者,有几个问题请教大侠。
1、如何去掉下拉列表框中的重复选项?
2、在编写数据库程序时,我在一窗体中用到Data 和 Dbgrid 控件进行绑定数据
库,通过设置 Dbgrid 控件的属性可以实现添加、删除等操作,我怎样才能得到
象Access中"冻结选定列" 或 象Foxpro 2.5中 Browse命令中 lock "列号"而实
现冻结”选定列呢,若能给出例子,小弟将不胜感激!
回答请mailto: guangli@adm.tjftz.gov.cn
*****************************************************
*****************************************************
<编者的话>
本刊已加入【CHINA-EZL】中国电子杂志联盟
联盟主页地址 http://china-ezl.yeah.net
如果您觉得这份刊物还不错的话,欢迎把它介绍给您的朋友.
不知道您看了这期刊物有什么想法或者是意见,欢迎向我提出来.
本人感激不尽,我的联系方法如下:
E-mail:yaozheng@kali.com.cn
本刊主页: http://yaozheng.soim.com
http://person.zj.cninfo.net/~yao
<<编程技术>>订阅方法:
请到本刊主页进行订退工作 http://person.zj.cninfo.net/~yao
投稿:向yaozheng@kali.com.cn发封邮件 主题:投稿
提问:向yaozheng@kali.com.cn发封邮件 主题:提问
**********************THE END************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -