高手坐镇
数字职场
编程开发领域很广,开发途中遇到的问题千奇百怪,碰到问题找不到解决方法怎么办?需要高人指点!为此,我们特意开设此栏目,邀请四方开发高手来帮助大家。如果你在开发途中遇到问题,如果你有能力解决这些问题,欢迎与我们联系,来信请发到pcw-chendx@vip.sina.com。
窗体变半透明
题目难度:★★★★★
读者来信: 我用VB设计程序,在设计窗体时,产生了额外的想法,就是想让窗体变成半透明,变透明我会,变半透明我不会,请《电脑报》的高手指点一下!
高级工程师 小恐龙:如果你是用的VB6,就要用到API函数,如果是用的VB.net就方便多了,它支持窗体透明。从你的描述来看,你应该用的是VB6。在VB6中, SetLayeredWindowAttributes是实现窗体的半透明的函数。具体示例代码如下:
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const WS_EX_LAYERED = &H80000
Const GWL_EXSTYLE = (-20)
Const LWA_ALPHA = &H2
Const LWA_COLORKEY = &H1
Private Sub Form_Load()
Dim rtn As Long
rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE) '取窗口原先的样式
头文件报错LNK2005
题目难度:★★★★★
读者来信:我在 Visual C++中创建一个Win32,名称为abc,在项目中创建了abc.c、bcd.c、zhy.h,之后在zhy.h中写入下面代码:const int OutputError = 0;,文件abc.c、bcd.c引用zhy.h时就报错LNK2005:找到一个或多个多重定义的符号。我检查了几遍,操作没有问题,怎么还是报错?
高级工程师 曾虹云:你遇到的这种情况不是代码问题,是编译器的问题,系统默认编译器为C++,因此把源文件扩展名改为cpp就可以通过(扩展名为cpp则调用C++编译器TP,扩展名为c则调用C编译器TC)。
除了改扩展名,还可以这样操作,点击菜单“项目→属性→配置属性→ C/C++→高级→编译为”,改为“编译为 C 代码(/TC)”,退出再编译一次,然后把其值改为“编译为 C++ 代码(/TP)”就可以了。
VS2005自动格式化
题目难度:★★
读者来信:我刚学习VS2005,遇到一个问题,在代码编辑器中,如何让写的代码自动缩进,也就是让代码自动格式化?
高级工程师 曾虹云:你的问题我能理解,代码没有对齐不利于阅读和分析。我提供一个方法,先选中要自动格式化的代码,然后按组合键“Alt+F8”。
如果要对全部代码进行格式化,就需要先按组合键“Ctrl+A”再按组合键“Alt+F8”。
此外,还可以这样操作,先按组合键“Ctrl+K”再按组合键“Ctrl+F”,效果是一样的。
监控网络中的流量
题目难度:★★★★★
读者来信:我是《电脑报》的忠实读者,最近想要用JSP编写一个网络管理系统,可是卡在了流量监控这块,不知道该怎么弄——如何获取网络流量的数据?怎样对它进行监听?我在网络上没有找到相关内容,希望《电脑报》的编程高手给我一点指点。
软件开发者 陈跃峰:如果要对网络中的流量进行控制和监听,那么网络内的所有数据传输需要经过一个固定的代理点(路由器、交换机),计算这个代理点发送的字节数和接收到的字节数就可以获得流量的具体数据(监听的原理和这个一样,只是需要分析发送和接收的数据而已)。
浮动提示条分行提示
题目难度:★★
读者来信:我开发的软件需要有英文提示,所以我想加一个浮动提示条,加上后我发现有的地方字数太多,超过了屏幕显示范围,我考虑分行显示,但不知道怎么做(第一次用Delphi编写软件,这个不是我的强项),来点建议吧!
软件开发者 故乡的云:浮动提示条的Hint本身是一个字符串(string), Delphi显示该字符串时会自动处理其中的回车控制符,所以只要加上回车控制符就可以了(依此原理,我们还能做出别具一格的垂直提示条)。示例代码如下所示:
procedure TForm1.FormShow(Sender: TObject);
begin
Label1.ShowHint:=true;
Label1.Hint :='分'+#13+'行'+#13+'提'+#13+' 示';
end; ■