((CEdit*)GetDialogItem(IDC_EDIT))->SetLimitText(10); //在initialDialog函数中处理
LimitText 设置个数,中英文相同个数
SetLimitText 设置字节数。
判断一个文件夹是否存在 DirExists(sPath);
Release模式下调试:
Project setting->c/c++ General页 Optimizations中选择Disable(debug) Debug Info中选择Program database or program database for edit and conitnue
Project setting->Link---Debug----debug info选中
#define WS_OVERLAPPED 0x00000000L
#define WS_POPUP 0x80000000L
#define WS_CHILD 0x40000000L
overlapped窗口就是有标题,系统菜单,最小最大化按钮和可调整大小边框的窗口
由于WS_OVERLAPPED为0,那我们是不是可以把WS_OVERLAPPEDWINDOW定义中的WS_OVERLAPPED拿掉呢?那是肯定的,那也就是说WS_OVERLAPPED什么都不是!
所有者窗口,就是Owner window,由于子窗口一定没有Owner,因此Owner window是对popup和Overlapped而言的
Quellcodedateien
1)(CMainFrame*)AfxGetMainWnd() //AfxGetMainWnd() 得到主程序的指针!~~
2)GetDlgItem(IDC_EDIT3) //GetDlgItem()得到控件指针!~~
3)GetDlgItem(IDC_ENGLISH)->SetFocus(); //SetFocus()光标所在区!~~~
4)SetGlgItemText(dlg,IDC_WIDTH,"");设置控件的名称!~~
5)MessageBox(
LPCTSTR lpszText,//消息字符串
LPCTSTR lpszCaption=NULL,//消息框标题
UINT nType=MB_OK //消息框风格
);
测试:
1.参数传递默认为NULL(如:fun(int a,int b=0))
2.焦点问题:有空单独调试一下,getclientrect,getwindowsrect
UpdateData(true);//将控件的值读到变量。
UpdateData(false);//将变量的值显示出来到控件
汉字由2个字节组成
它的高字节和低字节都可以表示为16进制的0x??
0x?? 的范围是0x80~0xFF
所以你只需要检测edit中的某个字符是否大于0x80,则紧随的下一个字符也是汉字中的一部分。
转换为UNICODE字符串后wstrlen
CharNext()
可以返回下一个完整的字符,不论是中文还是英文
方法一,使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。
方法二,使用“_T”将ANSI转换成“一般”类型字符串,使用“L”将ANSI转换成Unicode,而在托管C++环境中还可使用S将ANSI字符串转换成String*对象。例如:
TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”;
UpdateData(TRUE)
UpdateData(FALSE)
Flag that indicates whether dialog box is being initialized (FALSE) or data is being retrieved (TRUE).s
//2009-11-17更新
IP控件
char *inet_ntoa (struct in_addr in );
方法一
CString strIP="192.168.1.184";
DWORD dwAddress= ntohl( inet_addr(strIP));
m_IPCtrl.SetAddress(dwAddress); // m_IPCtrl 为IP 控件对象
方法二
直接用SetWindowText(),获取采用GetWindowText()就OK了!
CString strIP= "192.168.1.163 ";
m_ip.SetWindowText(strIP); //m_ip为IP控件的变量
IP控件在vc6里面有一个bug
afx_msg void OnChangeEditIP();
ON_EN_CHANGE(IDC_IPADDRESS,OnChangeEditIP)
(1)LockCount 是当前拥有 CRITICAL_SECTION 的线程调用 EnterCriticalSection 的次数
(2)SpinCount 是当线程访问 CRITICAL_SECTION 遇到争用时,
(3)如果仍得不到 CRITICAL_SECTION 的所有权,线程将进入信号量等待
(1) LockCount应该是线程已经尝试访问资源的次数,而RecursionCount才是线程调用EnterCriticalSection的次数吧。
(2)“当线程试图访问正在被另一个线程占用的资源时时,循环尝试再次取得该资源的最大允许次数”
(3)“线程将进入信号量等待”,信号量等待?对吗?是转入内核方式等待吧?
CFtpConnection运用问题
其基本步骤如下:
1、实现建立CInternetSession对象;
2、使用CInternetSession::GetFtpConnection连接到FTP服务器;
3、使用上一步返回的CFtpConnection对象的CFtpConnection::SetCurrentDirectory设置当前目录;
4、使用CFtpConnection::OpenFile打开文件,在打开文件的同时也就设定了传输模式是二进制还是文本方式;
5、利用上一步得到的CInternetFile的CInternetFile::Write向服务器写数据,通常你要在写数据前将本地文件读入缓冲区;
6、使用CInternetException来处理可能遇到的错误;
7、当上传完成后,释放CInternetSession对象。
long %ld;
unsigned long %ul;
CFile file;
if (file.m_hFile!=CFile::hFileNull)
{
//已经close了
}
if(f.m_hFile == CFile::hFileNull)
{
//表示文件已经被关闭了
}
sscanf(sInput," %[.,0-9]",szTmp);//查看sscanf
//背包问题
有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。
(strcmp(m_itemSolutionList.at(i)->sItemName,m_itemList.at(k)->sItemName)==0)
release 调试
Project setting->c/c++ General页 Optimizations中选择Disable(debug) Debug Info中选择Program database or program database for edit and conitnue
Project setting->Link Debug页 debug info选中
Xtrace
步骤如下:
1、在Project Settings里选Settings For为All Configurations。
2、在C/C++标签中,Debug info 选 Program Database。
3、在Link 标签中,Category选 Debug,选中Debug info 复选框和Microsoft format。
现在就可以像在调试版本中那样设置断点进行测试了,由于代码优化,有些变量观察不到,行的运行顺序可能也会不同。
说明:ASSERT宏在发行版本中不起作用,而应该用VERIFY来进行发行版的调试。如果发行版本运行有问题,可以先禁止所有代码优化再进行调试。
XTRACE
如果在发行程序时,想去掉这些附加的代码,无须删除XTRACE和#include"xTrace.h"语句,只需要在工程设置中定义NO_XTRACE宏即可,这样xTrace.h文件则犹如一个空文件一般,可执行程序中便没有任何附加代码了。