知识杂记

  每个月的流量大多贡献给查资料了,学习果然是件烧钱的事情啊(正经脸)

清空手机谷歌浏览器缓存的二十几个网页,也做一个简单的知识回顾。

使用CImage加载PNG的一般方法

  1. 打开stdafx.h添加#include<atlimage.h>
  2. 定义一个CImage类对象,调用CImage::Load方法装载一个外部图像文件;
  3. 调用CImage::Draw方法绘制图像。

eg.(待测试)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
	CRect rc;
	m_picCtrl.GetClientRect(&rc);
	SetWindowPos(this, 0, 0, 320, 80, SWP_SHOWWINDOW);
	CString strTemp;
	strTemp.Format(_T("%d%d"), rc.right, rc.bottom);
	CImage image;
	image.Load(_T("D:\\1.png"));
	CDC* pDc = m_picCtrl.GetWindowDC();//获取设备句柄
	image.Draw(pDc->m_hDC, rc);
	UpdateWindow();

MFC tab控件

  1. 创建一个对话框,放tab控件,将控件添加变量m_tabCtrl
  2. 再创建两个对话框,修改属性Border:none,Style:Child
  3. 在tabDlg中添加两个对话框类变量
1
2
CDialog1 m_dlg1;
CDialog2 m_dlg2;
  1. 在tabDlg的OnInitDialog()函数中添加:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
CRect rect;
m_tabCtrl.GetClientRect(&rect);
rect.top+=20;
rect.bottom-=1;
rect.left+1=1;
rect.right-=2;

m_tabCtrl.InsertItem(0,"第一页");
m_tabCtrl.InsertItem(1,"第二页");

m_dlg1.Create(IDD_DIALOG1,&m_tabCtrl);//或者Create(IDD_DIALOG1,GetDlgItem(IDC_TAB));
m_dlg2.Create(IDD_DIALOG2,&m_tabCtrl);

m_dlg1.ShowWindow(&rect);
m_dlg2.ShowWindow(&rect);

m_dlg1.ShowWindow(true);
m_dlg2.ShowWindow(false);
  1. 在tabDlg中添加TCN_SELECHANGE消息
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
void CtabDlg::OnTcnSelchangeTab1(NMHDR *PNMHDR, LRSULT *pResult)
{
	switch(m_tabCtrl.GetCurSel())
	{
	case 0:
	m_dlg1.ShowWindow(true);
	m_dlg2.SWP_SHOWWINDOW(false);
	break;
	case1:
	m_dlg1.ShowWindow(false);
	m_dlg2.ShowWindow(true);
	break;
	}
	*pResult = 0;
}

安全函数

strtok_s wcstok_s

在MFC对话框中显示html网页

创建对话框时勾选html对话框,添加控件变量m_html; 然后在OnInitDialog()中添加

1
m_html.Navigate("www.baidu.com");

CXImage的使用

另成一篇。

限制只启动一个exe

1
2
3
4
5
if(FindWindow(NULL,"caption")= 0)
{
	MessageBox("程序已运行!");
	return;
}

PCE.js

https://jamesfriend.com.au/pce-js/mobile/

MFC复选框

法一:

1
2
CButton* pBtn=(CButton*)GetDlgItem(IDC_CHECK1);
int state = pBtn->GetCheck();

state==0 复选框没有被选中 state==1 复选框被选中 state==2 不确定(只有button有BS_3STATE或BS_AUTO3STATE style时才可用) 设置状态:

1
2
CButton* pBtn=(CButton*)GetDlgItem(IDC_CHECK1);
int state = pBtn->GetCheck(1);

法二:

1
2
3
4
if(BST_CHECKED == IsDlgButtonChecked(IDC_CHECK1))
{
	//对应操作
}

使用BS_AUTOCHECKBOX、BS_AUTORADIOBUTTON、BS_AUTO3STATE、BS_CHECKBOX、BS_RADIOBUTTON或BS_3STATE样式创建的按钮的返回值可以是如下值之一: BST_CHECKED 按钮被选中 BST_UNCHECKED 按钮未被选中 BST_INDETERMINATE 不确定,按钮灰显(只有button有BS_3STATE或BS_AUTO3STATE style时才可用)

法三: 为控件添加BOOL变量m_delete;

1
2
3
4
5
void CTestDlg::DoDataExchange(CDataExchange *pDX)
{
	CTestDlg::DoDataExchange(pDX);
	DDX_Check(pDX,IDC_CHECK1,m_delete);
}

关于“不允许指针指向不完整的类类型”问题分析

神贴必看,自从看过后,再也没犯过这个错,我不会说脑海里都是作者满满的嘲讽笑声的 http://m.blog.csdn.net/luna84/article/details/50380186

树节点遍历

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Traverse(m_tree, hChild)
{
	HTREEITEM hChild = m_tree.GetChildren(hItem);
	while(hChild)
	{
		bool temp=Traverse(m_tree,hChild);
		if(temp==true)
		{
			return true;
		}
		hChild=m_tree.GetNextSiblingItem(hChild);
	}
	return false;
}

遍历Vector的几种方法

C++11 法一:

1
2
3
4
for(size_t i=0;i<vec.size();++i)
{
	int	iTemp = vec[i];
}

法二:

1
2
3
4
for(auto it = vec.begin();it!=vec.end();++it)
{
	int iTemp = *it;
}

法三:

1
2
3
4
for(int i:vec)
{
	int iTemp = i;
}

法四:

1
2
3
for_each(vec.begin(),vec.end(),[](int i){
int iTemp = i;
});

表达式的副作用

http://www.cnblogs.com/shiguangshuo/p/5236962.html

理解递归

另成一篇。

屏蔽回车和ESE

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
	if(pMsg->message==WM_KEYDOWN)
	{
		if(pMsg->wParam==VK_RETURN||pMsg->wParam==VK_ESCAPE)
		{
			return true;
		}
	}
	return CDialogEx::PreTranslateMessage(pMsg);

}

MFC查找特定后缀文件

法一:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
CFileFind findfile;
CString strPath;
CString strName;
CString strFilePath;
BOOL bRet=findfile.FindFile(strPath+_T("*.txt"));//以.txt为例
if(!bRet)
{
MessageBox(_T("无此文件!"));
}
while(bRet)
{
bRet=findfile.FindNextFile();
strName=findfile.GetFileTitle();
strFilePath=findfile.GetFilePath();
if(//操作)
{
//所需操作;
}
}

法二:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
vector<CString> fileList;
WIN32_FIND_DATA wfd;
CString sPath=_T("*.txt");
HANDLE hFile=FindFirstFile(sPath.GetBuffer(),&wfd);
if(INVALID_HANDLE_VALUE==hFile)
{
TRACE(_T("不合法!\n"));
return;
}do
{
fileList.push_back(wfd.cFileName);
TRACE("%s\n",wfd.cFileName);
}while(FindNextFile(hFile,&wfd));

使用WIN32_FIND_DATA好像存在内存释放的问题。

为CDHtmlDialog添加滚动条

初始化中添加以下代码即可。

1
SetHostFlags(DOCHOSTUIFLAG_NO3DBORDER|DOCHOSTUIFLAG_DIALOG);

Notepad++ 没有自动补全敲代码好累…

Licensed under CC BY-NC-SA 4.0
最后更新于 0001-01-01 00:00 UTC
使用 Hugo 构建
主题 StackJimmy 设计