分享
 
 
 

VC++编程技巧三则

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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);

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有