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


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

使用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;
  4. 在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);
  5. 在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++ 没有自动补全敲代码好累…