VC++开发的应用技巧三则放送
1.创建向导对话框
当使用一个特定的软件时,我们经常使用向导模式在程序中创建新文件。最典型的例子是在Frontpage2000或Word2000中使用向导模式创建新的网页文件或Word文档。那么,看到其他程序可以提供人性化的向导对话框后,你有没有什么冲动呢?如果是这样,您不妨使用下面的代码来创建一个向导对话框:
以下是引用的片段:
void cmy 56 _ s1dlg::on wiz()
{
c sheet sheet;
表。SetWizardMode();
int iRet=sheet。DoModal();//返回ID_WIZFINISH或ID cancel
}
/overload BOOL CPropertyPage::on setactive()控制显示的按钮。
BOOL cpage 1::on setactive()
{
((CPropertySheet *)get parent())--> SetWizardButtons(PSWIZB _ BACK | PSWIZB _ NEXT);
return CPropertyPage::on setactive();
}
BOOL cpage 2::on setactive()
{
((CPropertySheet *)get parent())--> SetWizardButtons(PSWIZB _ BACK | PSWIZB _ FINISH);
return CPropertyPage::on setactive();
}
2。在计算机之间发送和接收数据
众所周知,计算机在相互通信时,通常是通过TCP协议与指定IP地址的主机建立联系,相互通信。在这个过程中,一方必须扮演服务器的角色并等待另一方(客户端)的连接请求,所以服务器需要建立一个监控windows套接字,然后在这个windows套接字上等待连接。当连接建立后,将为通信生成一个新的windows套接字。然而,在创建windows套接字之后,客户端可以简单地通过调用连接函数来创建连接。对于连接的通信,数据传输以及传输和接收的顺序都得到保证。下面的代码使用VC++提供的CSocket来实现数据发送和接收的功能:
以下是引用:
/*
服务器端等待6802端口的连接,当连接建立后,关闭监听windows套接字
客户端向服务器端口6802发送连接请求
*/
BOOL cmy 63 _ S1 _ server DLG::OnInitDialog()
{
CDialog::OnInitDialog();
CSocket sockListen
//创建一个本地windows sockets
sock listen . Create(6802,sock _ stream," 127 . 0 . 0 . 1 ");
//绑定参数
socklisten.bind (6802," 127 . 0 . 0 . 1 ");sockListen。听(5);
//等待连接请求,m_sockSend是成员变量,用于通信
sock listen . accept(m _ sock send);
//关闭侦听windows套接字
sockListen。close();
//启动定时器,定时发送数据
SetTimer(13000,null);
}
void cmy 63 _ S1 _ server DLG::on time(UINT nIDEvent)
{
static iIndex = 0;
char szSend[20];
sprintf(szSend," %010d ",iindex++);
//发送TCP数据
int Send = m _ socks end . Send(szsend,10,0);
}
BOOL cmy 63 _ S1 _ client DLG::OnInitDialog()
{
CDialog::OnInitDialog();
//创建一个本地windows套接字
m_sockRecv。create();
//发起连接请求
bool fc = m _ sock recv . connect(" 127 . 0 . 0 . 1 ",6802);
TRACE("connect is %s ",(fC)?“OK”:“Error”);
//启动定时器,定时接收数据
SetTimer(13000,NULL);
}
void cmy 63 _ S1 _ client DLG::on time(UINT nIDEvent)
{
char szRecv[20];
//接收TCP数据
inti recv = m _ sock recv . Receive(szrecv,10,0);
TRACE("已接收%d字节",iRecv);
if(iRecv > = 0)
{
SZ recv[iRecv]= ' ';
m _ SZ recv = SZ recv;
update data(FALSE);
}
}
3.让工具栏并排显示。
假设Windows程序窗口中有几个工具栏。现在我们希望这些工具栏并排显示。如何才能实现这一点?这里我们可以用下面的函数来实现这个功能,这个函数是从CJ60Lib函数库中获取的。作者在下面的程序中实现的功能是:LeftOf toolBar显示在Bar工具栏的左侧,而且要并排显示。下面是实现其功能的主要代码:
下面是引用的片段:
void ccjmdiframewnd::DockControlBarleftof(ccontrolbar * bar,
ccontrolbar * left of)
{
crectrect;
DWORD dw;
UINT n;
//使用MFC调整所有工具栏的大小
//确保GetWindowRec准确
RecalcLayout(TRUE);
left of-> GetWindowRect(& rect);
rect。OffsetRect(1,0);
dw = left of-> getbar style();
n = 0;
n = (dw&CBRS_ALIGN_)?AFX _ IDW _ dock bar _: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 _ dock bar _ RIGHT:n;
DockControlBar(Bar,n,& rect);
}
0条评论