CDateTimeCtrl 设定为“ShowNone” 为 True
2.Format 初始化
CDateTimeCtrl m_Date1;
m_Date1.SetFormat(_T("yyyy'- 'MM'- 'dd"));
3.Format初始化选择确认框为空
CDateTimeCtrl m_Date1;
::SendMessage( this->m_Date1.m_hWnd,(UINT)DTM_SETSYSTEMTIME,GDT_NONE, NULL);

4.Format初始化选择确认框变化是产生的动作

voidPageDialog4::OnDtnDatetimechangeDatetimepicker1(NMHDR *pNMHDR,LRESULT *pResult)
{
LPNMDATETIMECHANGE pDTChange =reinterpret_cast<LPNMDATETIMECHANGE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
if(pDTChange->dwFlags == GDT_NONE)
{
this->m_Date2.EnableWindow(FALSE);
}
else if (pDTChange->dwFlags == GDT_VALID)
{
if( this->m_Date2.IsWindowEnabled() == FALSE)
{
this->m_Date2.EnableWindow(TRUE);
CTime theTime = CTime::GetCurrentTime();
this->m_Date1.SetTime(&theTime);
this->m_Date2.SetTime(&theTime);
}
}

*pResult= 0;
}

5.获取时间

CTimetimeTime;
CString szDate;
CDateTimeCtrl* pCtrl =&this->m_Date1;
DWORD dwResult =pCtrl->GetTime(timeTime);
if (dwResult == GDT_VALID)
{
szDate = timeTime.Format(TEXT("%Y/%m/%d"));
}

获取时间的第二种方法:


6.根据Format格式设定时间

CTime theTime = CTime::GetCurrentTime();
this->m_Date1.SetTime(&theTime);

posted @ 2012-11-06 15:03 Mumoo 阅读(3884) | 评论 (0)编辑 收藏
 
本文转载至http://www.cppblog.com/jialisoft/archive/2012/10/11/193149.html
 

学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难

unresolved external symbol (不确定的外部符号)。

如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:

(1) 所引用的函数、变量不存在、拼写不正确或者使用错误;

(2) 可能使用了不同版本的连接库。

以下是可能产生LNK2001错误的原因:   
1. 由于编码错误导致的LNK2001   
(1) 不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如,   如果在C++   源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。   
(2) 如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。   
(3) 调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001   
(4) 试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001   
(5) 要注意函数和变量的可公用性,只有全局变量、函数是可公用的。 静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001   
函数内声明的变量(局部变量)   只能在该函数的范围内使用。 
C++的全局常量只有静态连接性能。这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。 
  
2. 由于编译和链接的设置而造成的LNK2001 
(1) 如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块,   但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。在这种情况下使用/NOD将导致错误LNK2001   
(2) 如果没有为wWinMainCRTStartup设定程序入口,在使用UnicodeMFC时将得到“unresolved   external   on   _WinMain@16”LNK2001错误信息。   
(3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”   的引用。如果试图使用静态库LIBC.LIBLIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB连接时也会发生LNK2001   
(4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001   
(5)当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产生LNK2001;同样,使用调试版模态库连接发行版应用程序时也会产生相同的问题。   
(6) 不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。   
(7) 在不同的模块使用内联和非内联的编译选项能够导致LNK2001。如果创建C++库时打开了函数内联(/Ob1/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),这时将得到该错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函数。   

(8) 不正确的/SUBSYSTEM/ENTRY设置也能导致LNK2001

其实,产生LNK2001的原因还有很多,以上的原因只是一部分而已。

上面错误的原因是在程序中违反了标准C++的规定而引起的。下面还要说明一中由于编译器而引起的错误:

在标准C++中模板类的定义和实现是不能分开的,原因是类模板和函数模板都不是真正的定义,真正的定义是在模板实例化时由编译器生成的。如果将模板的定义和实现分离的话,编译器在生成定义时就会因为找不到实现而报错。

在标准C++中模板类的定义和实现是可以像普通类一样分开来存放(类定义放在.h中,类实现放在.cpp)。然而这个实现起来太困难,所以大多数编译器都不支持(比如VC)。这样,如果在VC中编译代码,代码中将模板的定义和实现分开了,就会产生LNK2001的错误。

posted @ 2012-10-22 15:19 Mumoo 阅读(871) | 评论 (0)编辑 收藏
 
SilentInstall silent —— 设置静默安装 此状态下可使用 MessageBox 的 /SD 参数来指定静默安装时默认的返回值

HKLM——Local Machine
HKCU——Current User
posted @ 2012-09-27 17:48 Mumoo 阅读(434) | 评论 (0)编辑 收藏
 
ListCtrl的InsertItem方法默认首列不相同,若首列值相同,则每次均插入第0行。
修改算法如下:
int nSize = 100;

int nCount = 0;
 for (int i = 0; i < nSize; i++)
 {
   CString sValue;
  sValue.Format("%d", nCount);

  int nInsLine = InsertItem(nCount, sValue);
  nCount++;

  int nColumn = 0;
  for (int j = 0; j < vRecord.size(); j++)
  {
     sValue = recordItem.sValue;
     SetItemText(nInsLine, nColumn, sValue);
   nColumn++; 
  }
 }

posted @ 2012-09-04 14:48 Mumoo 阅读(285) | 评论 (0)编辑 收藏
 
//Source:AllCode_Release?/PCPrintManage?/USBRegedit;
   //Dest:   PCPrintManage
   int nURLFindFirstSecond = sURL.ReverseFind('?');
   ASSERT(nURLFindFirstSecond != -1);
   CString sMidDir = sURL.Mid(nURLFindFirst+2, nURLFindFirstSecond-(nURLFindFirst+2));
   sSubCodeOutPath = m_sCodeOutPath + "\\" + sMidDir;
   sSubCodeOutPath.Replace("?", "");
posted @ 2012-08-23 17:27 Mumoo 阅读(680) | 评论 (0)编辑 收藏
 
1)创建CStatic Control变量 m_sStatic;
2)OnInit函数中 调用:m_sStatic.SetWindowText(sName);
posted @ 2012-07-20 10:17 Mumoo 阅读(803) | 评论 (0)编辑 收藏
 
对话框类中添加消息函数(Messages) WM_OnContextMenu
 afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/); //函数声明

 void CBarView::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/) //函数体
 {
  // TODO: Add your message handler code here
  CMenu menu;
  menu.LoadMenu(IDR_RIGHTMENU);
  CMenu* pop=menu.GetSubMenu(0);
  POINT ptMouse;
  GetCursorPos(&ptMouse);
  pop->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,ptMouse.x,ptMouse.y, this);

 }



posted @ 2012-07-10 15:35 Mumoo 阅读(1099) | 评论 (0)编辑 收藏
 

1.
  所有变量定义位于函数开始处。

2.
 尽量避免全局变量,全局变量需于实现文件中定义,头文件中extern声明。

3.
浮点零值比较采用区间值。

4.
保证正确的前提下尽量使用移位运算。

5.
If语句、switch语句优先处理出现概率大的情况。

6.
 指针与NULL比较反写如:NULL==p。

7.
 循环嵌套时最长的循环放内层短的放外层。

8.
尽量不在循环体内修改循环变量。

9.
凡是无返回值、无参数、任意类型指针参数的函数均使用void或void指针。

10.
适当使用const,使用目的限于节省空间、提高效率、不允许修改或可能产生的函数参数修改。

11.
对于可变、多变的寄存器变量、多线程共享变量,在经过代码优化处理的releas版本下需使用volatile类型修饰符修饰变量。

12.
多参数函数应使用结构体减少参数个数。

13.
负数右移操作时会带上符号位,高位补零或补一取决编译器。左移或右移时移动位数不能大于数据的存储位数。

14.
 Release版下assert()语句无效,故非调试状态下还是可能出现数据溢出而不报错。

15.
使用宏定义#define定义文件路径时候使用带双引号、双反斜杠的字符串。宏定义函数时候尽可能的使用括号。宏定义中的换行接续后和行起始处保证无任何字符。

16.
一种变量名称代表一段有限空间,其内容称为值,c/c++中称之为从左值到右值的转换。另一种变量是一段有限空间的引用,同时规定空间的长度(数组)。

17.
创建动态二维数组(指向指针的指针)一维使用new char*[一维度] 或者 (char**)malloc(一维度).二维循环于一维下动态创建new char[二维度] 或者(char*)malloc(二维度)。释放动态二维数组刚好相反,先循环释放二维,再释放一维。

18.
使用vector作为全局变量时候存在问题。release版下push_back()会出现错误,估计是vector本身具有动态扩展性而做为全局变量其空间大小是固定的。如果允许其变量使用push_back添加数据则可能导致堆数据破坏。解决办法是将变量定义于类中并完成push_back再赋值于全局变量。

19.
利用字符创的结束标识'/0' (其ascII 码是 0,0x00)而非空格(其ascII 码是 32,0x20)可判断字符串结束以否,并可以移动指针的方式计算字符串的大小。

20.
Dll库,不但可以导出函数接口,也可以导出类。如:calss _declspec(dllexport) CALSSNAME{}; class _declspec(dllimport) CLASSNAME{};#pragma comment(lib,"path")。

21.
合理使用整数的/ 和 % 可取得整数(浮点数整数部分)的各个位数(%10 /10),合理使用h,p,q,t做循环下的指针移动可以构建链表和逆序链表。合理利用数组下标可实现折半循环逆序数组(字符串)

22.
int a= 4; (++a) += (a++)  a= ?

23.
字符数组的大小不要忘了最后的'/0'(字符指针不能使用sizeof(point)计算)。

24.
free后的内存空间只是被标记为了可重新分配,但作为该进程的内存块他依然具有读写权限,为了避免内存混乱需要NULL指针避免野指针的存在。

25.
不存在下载文件夹的说法,只有下载文件数据和文件目录信息,文件夹于本地创建。

26.
使用哈希查找加速检索,哈希过程就是建立直接索引的过程,经过哈希处理的数据在查找时候可以通过函数计算后直接定位(哈希表的索引值相当于数组索引直接定位)到该数据。哈希不能做到百分百的唯一,所以需要处理哈希冲突,通常使用链表加关键值匹配。

27.
减少程序与外存的交互次数可提速程序执行,考虑使用链表一次加载多次使用、内存块分配或者文件映射等方法。

28.
对大数据大文件的处理,考虑使用多线程均分工作任务的办法从而可降低对处理器的占用率。

posted @ 2012-06-21 16:45 Mumoo 阅读(387) | 评论 (0)编辑 收藏
 

string 转 CString
CString.format("%s", string.c_str());

char 转 CString
CString.format("%s", char*);

char 转 string
string s(char *);

string 转 char *
char *p = string.c_str();

CString 转 string
string CStringTostring(CString str)
{
string s;

s.append(str.GetBuffer(str.GetLength()));

str.ReleaseBuffer();

return s;

}

1,string -> CString
CString.format("%s", string.c_str());
用c_str()确实比data()要好.
2,char -> string
string s(char *);
你的只能初始化,在不是初始化的地方最好还是用assign().


C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C—string
1.data(),返回没有”{post.content}“的字符串数组
2,c_str(),返回有”{post.content}“的字符串数组
3,copy()

---------------------------------------------------------------

CString与int、char*、char[100]之间的转换- -


CString与int、char*、char[100]之间的转换- -



CString互转int

将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。如
CString s;
int i = 64;
s.Format("%d", i)
Format函数的功能很强,值得你研究一下。

void CStrDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString
ss="1212.12";
int temp=atoi(ss);
CString aa;
aa.Format("%d",temp);
AfxMessageBox("var is " + aa);
}

sart.Format("%s",buf);

CString互转char*

///char * TO cstring
CString strtest;
char * charpoint;
charpoint="give string a value";
strtest=charpoint;


///cstring TO char *
charpoint=strtest.GetBuffer(strtest.GetLength());

标准C里没有string,char *==char []==string

可以用CString.Format("%s",char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。


CString转换 char[100]

char a[100];
CString str("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));

posted @ 2012-06-21 15:25 Mumoo 阅读(298) | 评论 (0)编辑 收藏
 

BOOL  MergeXMLToDesXML(const CString &sDesXMLPath, const CString &sSrcXMLPath)
{
 TiXmlDocument XmlDocSrc(sSrcXMLPath);
 if (!XmlDocSrc.LoadFile())
 {
  LOG("GetJobXMLInfo:加载XML文件%s失败", sSrcXMLPath);
  return FALSE;
 }

 TiXmlDocument XmlDocDes(sDesXMLPath);
 if (!XmlDocDes.LoadFile())
 {
  LOG("GetJobXMLInfo:加载XML文件%s失败", sDesXMLPath);
  return FALSE;
 }

 TiXmlElement *pFirstChildSrc = XmlDocSrc.FirstChildElement("Root");

 TiXmlElement *pFirstChildDes = XmlDocDes.FirstChildElement("Root");
 if (TiXmlElement* pRecordAtributeDes = pFirstChildDes->FirstChildElement("FirstChild"))
 {
  while(pRecordAtributeDes)
  {
   pFirstChildSrc->InsertEndChild(*pRecordAtributeDes); 
   pRecordAtributeDes = pRecordAtributeDes->NextSiblingElement();
  }
 }

 XmlDocSrc.SaveFile(sDesXMLPath);
 return TRUE;
}

posted @ 2012-06-18 17:53 Mumoo 阅读(1024) | 评论 (0)编辑 收藏
仅列出标题
共4页: 1 2 3 4