VC编程小技巧

1.rich edit控件使用时需要初始化

用vc新建dialog.添加rich edit 后编译可以通过,运行后自动退出,原因即是没有初始化的后果。

解决方法:

AfxInitRichEdit();    
CWinApp::InitInstance();

必须在CWinApp::InitInstance();
 之前。



2.socket编程对socket需要初始化

在你重载的CWinApp::InitInstance函数中调用这个函数以初始化WindowsSockets。
在调用 AfxSocketInit() 之前,需要包含 afxsock.h 头文件。
例子:
if ( !AfxSocketInit() )
{
AfxMessageBox( _T("Failed to Initialize Sockets"), MB_OK | MB_ICONSTOP);
return FALSE;
}

解释:WASAtarup()是应用程序调用的windows sockets dll的第一个函数,在调用任何winsock api之前,必须调用wsastartup()进行初始化,最后调用WSACleanup()做清理工作.
      MFC中的函数AfxSocketInit()包装了函数WSAStartup(),在支持WinSock的应用程序的初始化函数IninInstance()中调用AfxSocketInit()进行初始化,程序则不必调用WSACleanUp().


3.获得edit控件的内容或者赋值

为控件关联一个control类型的变量,例如CEdit m_edit,
用m_edit.SetWindowText("");就可以清空内容。用m_edit.GetWindowText(str);就可以得到内容。

如果关联的是CString变量可以把那个变量赋值为"",然后UpdateData()。


4.获得窗口句柄

HWND hWnd = ::FindWindowEx(this->GetParent()->m_hWnd, NULL, NULL, WINDOW_TEXT);
其中,m_hWnd为名为WINDOW_TEXT的子窗口的父窗口的句柄,WINDOW_TEXT为子窗口的标题,得到的hWnd为子窗口的句柄,this指代子窗口。
hWnd1=::FindWindowEx(FromHandle(hWnd)->GetDlgItem(IDC_TAB1)->m_hWnd, NULL, NULL, WINDOW_TEXT);

第二句中hWnd为IDC_TAB1的父窗口,m_hWnd即IDC_TAB1


5.突破静态成员函数不能非静态成员的限制

解决此问题的一种途径是可以在调用类静态成员函数(线程函数)时将this指针作为参数传入,并在改线程函数中用强制类型转换将this转换成指向该类的指针,通过该指针访问非静态成员。
例如:
class A
{
public:
static void f(A a);


private:
int x;
};
void A::f(A a)
{
cout<<a.x;

}


6.判断socket连接是否断开 

bool IsSocketClosed(SOCKET clientSocket)  
{  
 bool ret = false;  
 HANDLE closeEvent = WSACreateEvent();  
 WSAEventSelect(clientSocket, closeEvent, FD_CLOSE);  
  
 DWORD dwRet = WaitForSingleObject(closeEvent, 0);  
   
 if(dwRet == WSA_WAIT_EVENT_0)  
 ret = true;  
 else if(dwRet == WSA_WAIT_TIMEOUT)  
 ret = false;  
  
 WSACloseEvent(closeEvent);  
 return ret;  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值