VC++编程技巧三则

原创 2001年07月31日 10:55:00
VC++编程技巧三则
(帷幄 2001年07月12日 11:49)

1、让工具栏并列显示

假设在Windows程序窗口中有几个工具栏,现在我们希望让这些多个工具栏并列显示,该怎么实现呢?在这里,我们可以使用下面的函数来实现该功能,此函数是从CJ60Lib函数库弄下来的。笔者在下面的程序中实现的功能是,让LeftOf工具栏显示在Bar工具栏的左侧,同时还要并列显示在一起,下面就是实现其功能的主要代码:

void CCJMDIFrameWnd::DockControlBarLeftOf(CControlBar* Bar, CControlBar* LeftOf)
{
CRect rect;
DWORD dw;
UINT n;
// 使用MFC来调整所有工具栏的尺寸
// 确保GetWindowRec准确
RecalcLayout(TRUE);
LeftOf->GetWindowRect(&rect);
rect.OffsetRect(1,0);
dw=LeftOf->GetBarStyle();
n = 0;
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);
}

2、创建向导对话框

在使用具体某个软件的时候,我们常常会在该程序中使用向导模式来建立新的文件,最典型的例子就是在Frontpage2000中或者Word2000中使用向导方式来新建一个网页文件或者Word文档。那么看到别的程序都能提供人性化的向导对话框后,不知您有没有什么冲动?如果有的话,不妨使用下面的代码来创建一个向导对话框:

void CMy56_s1Dlg::OnWiz()
{
CSheet sheet;
sheet.SetWizardMode();
int iRet=sheet.DoModal();//返回ID_WIZFINISH或IDCANCEL
}
//重载BOOL CPropertyPage::OnSetActive( )来控制显示的按钮
BOOL CPage1::OnSetActive()
{
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
BOOL CPage2::OnSetActive()
{
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);
return CPropertyPage::OnSetActive();
}

3、在计算机之间实现收发数据

大家知道,计算机之间相互通信时,一般都是通过TCP协议来与指定IP地址的主机来建立联系,并进行相互通信的,在这个过程中,必需有一方扮演服务器的角色等待另一方(客户端)的连接请求,所以服务器端需要建立一个监听套接口,然后在此套接口上等待连接。当连接建立后会产生一个新的套接口用于通信。而客户端在创建套接口后只需要简单的调用连接函数就可以创建连接。对于有连接的通信不论是数据的发送还是发送与接收的顺序都是有保证的。下面的代码就是利用VC++提供的CSocket来实现数据收发功能的:

/*
服务器方在端口6802上等待连接,当连接建立后关闭监听套接口
客户方向服务器端口6802发起连接请求
*/
BOOL CMy63_s1_serverDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CSocket sockListen;
//创建本地套接口
sockListen.Create(6802,SOCK_STREAM,"127.0.0.1");
//绑定参数
sockListen.Bind(6802,"127.0.0.1");
sockListen.Listen(5);
//等待连接请求,m_sockSend为成员变量,用于通信
sockListen.Accept(m_sockSend);
//关闭监听套接口
sockListen.Close();
//启动定时器,定时发送数据
SetTimer(1,3000,NULL);
}
void CMy63_s1_serverDlg::OnTimer(UINT nIDEvent)
{
static iIndex=0;
char szSend[20];
sprintf(szSend,"%010d",iIndex++);
//发送TCP数据
int iSend= m_sockSend.Send(szSend,10,0);
}
BOOL CMy63_s1_clientDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//创建本地套接口
m_sockRecv.Create();
//发起连接请求
BOOL fC=m_sockRecv.Connect("127.0.0.1",6802);
TRACE("connect is %s/n",(fC)?"OK":"Error");
//启动定时器,定时接收数据
SetTimer(1,3000,NULL);
}
void CMy63_s1_clientDlg::OnTimer(UINT nIDEvent)
{
char szRecv[20];
//接收TCP数据
int iRecv =m_sockRecv.Receive(szRecv,10,0);
TRACE("received %d byte/n",iRecv);
if(iRecv>=0)
{
szRecv[iRecv]='/0';
m_szRecv=szRecv;
UpdateData(FALSE);
}
}


VC++ 常用编程技巧总结

VC++6.0的使用以及编程技巧整理 1、MDI子窗口一启动就最大化      BOOL   CChildFrame::PreCreateWindow(CREATESTRUCT&   cs...
  • bcbobo21cn
  • bcbobo21cn
  • 2017年04月01日 22:28
  • 7463

vc++ 20个小技巧

一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set...
  • oceanark
  • oceanark
  • 2016年07月13日 23:52
  • 494

mac使用技巧三则

1.修改机器名           mac安装完成以后会默认将你的机器设成"rainbird's Macbook Pro"之类的名字.这个本身看着就不爽,如果这台机器是别人先用你再用的话,就想把它...
  • lx923988898
  • lx923988898
  • 2013年10月10日 17:23
  • 493

Zsh 技巧三则

在每个目录下,经常用到的命令是不一样的 比如在源码目录下常用的是 make xxx ,在配置文件目录下常用的是 vi xxx …… 这种情况下,每个目录使用独立的历史纪录就比较方便(似乎有发行版中的 ...
  • C860_zy
  • C860_zy
  • 2013年06月09日 10:08
  • 1617

mac使用技巧三则

1.修改机器名           mac安装完成以后会默认将你的机器设成"rainbird's Macbook Pro"之类的名字.这个本身看着就不爽,如果这台机器是别人先用你再用的话,...
  • u012971339
  • u012971339
  • 2016年07月25日 17:43
  • 184

单片机编程开发技巧

工作了7个月之久,对单片机的编程也开始慢慢熟悉起来,以前总是知道单片机就是定时器,状态机,中断这些东西结合起来效率是相当高的,但是自从接手开发GPF这个芯片之后,我发现了另外一种单片机的开发技巧,高手...
  • morixinguan
  • morixinguan
  • 2016年06月27日 12:05
  • 2706

30个java编程小技巧

Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在。 有超过30亿的设备是运行在Java之上的。根据...
  • my_name_nb
  • my_name_nb
  • 2017年03月28日 21:33
  • 966

C、C++编程技巧

技巧1          计算某个数转化为二进制后,其二进制数中含有多少个1?...
  • lukairui7747
  • lukairui7747
  • 2014年06月26日 20:30
  • 736

VS2013编程实用小技巧

1. Peek View可以在不新建TAB的情况下快速查看、编辑一个函数的代码。用法:在光标移至某个函数下,按下alt+F12,显示Peek窗口,按F12直接转到定义。 然后在Peek窗口里可以...
  • zx3517288
  • zx3517288
  • 2016年10月26日 21:58
  • 1457

30 个java编程技巧(最佳实践的初学者)

1.return 一个空的集合,而不是 null 如果一个程序返回一个没有任何值的集合,请确保一个空集合返回,而不是空元素。这样你就不用去写一大堆 ”if else” 判断null元素。 ...
  • zyf__java
  • zyf__java
  • 2016年09月05日 08:23
  • 6190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++编程技巧三则
举报原因:
原因补充:

(最多只允许输入30个字)