MFC使用记录


 

listcontrl加入复选框 

目的:使列表框(CListCtrl)的每个项(item)前面有个复选,用来标明是否选中,提交数据是只选择选中的

方法:为列表框(CListCtrl)多加一个LVS_EX_CHECKBOXES风格 m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES); 添加的项(即“行”)的第一列总会在项目名前出现一个复选框(添加项后才能看到复选框)

vc 隐藏应用程序

在oninitdialog加入

SetWindowPos(&CWnd::wndNoTopMost,0,0,0,0,SWP_HIDEWINDOW);
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);


只是桌面隐藏,应用程序那还是看的到

vc获得本机ip信息

在stdafx.h加入

#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")


在程序加入


WSADATA wsadata;
	if(0 != WSAStartup(MAKEWORD(2,2),&wsadata))
	{
		MessageBox(_T("network fail"));
		return TRUE;
	}
	char szHostName[MAX_PATH+1];
	gethostname(szHostName,MAX_PATH);
	hostent *p=gethostbyname(szHostName);
	if(p==NULL)
	{
		MessageBox(_T("network loacl fail"));
		return TRUE;
	}
	m_Name=szHostName;
	int nCount=0;
	char *pIP=inet_ntoa(*(in_addr *)p->h_addr_list[0]);
	m_Addr=pIP;
	UpdateData(FALSE);
	WSACleanup();

vc读取串口

HKEY hKey;
	int nreatval;
	nreatval=RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Hardware\\DeviceMap\\SerialComm"),NULL,KEY_READ,&hKey);
	int i=0;
	if(nreatval == ERROR_SUCCESS)
	{
		char szPortName[MAX_PATH],szCommName[MAX_PATH];
		DWORD dwLong,dwSize;
		while(1)
		{
			nreatval = RegEnumValueA(hKey,i,szPortName,&dwLong,NULL,NULL,(PUCHAR)szCommName,&dwSize);
			if(nreatval==ERROR_NO_MORE_ITEMS) break;
			CString strText;//="NAME:";
			strText="NAME:";
			strText+=szCommName;
			strText+=" PORT:";
			strText+=szPortName;
			m_LISTComm.AddString(strText);
			i++;
		}
		RegCloseKey(hKey);
	}

获得mfceditbrowse的路径

最俗的办法

CString strFilePath;
GetDlgItemText(IDC_MFCEDITBROWSE1, strFilePath);
CWebBrowser2 * pBrowse = (CWebBrowser2 *) GetDlgItem(IDC_EXPLORER1);
pBrowse->Navigate(_T("http://www.baidu.com"),NULL,NULL,NULL,NULL);
LPDISPATCH lpdisp = pBrowse->get_Document();


IHTMLDocument2 *pDoc2;
IDispatch *WebDocument=static_cast<IDispatch*>(lpdisp);
pDoc2=static_cast<IHTMLDocument2*>(WebDocument);



CComDispatchDriver spScript;
HRESULT result=pDoc2->get_Script(&spScript);


listctrl checkbox设置单选

1、
    要让ListCtrl的每一行的第一列为CheckBox,需要做如下设置:

  listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle()|LVS_EX_CHECKBOXES); 

2、 
 为了限制ListCtrl只能有一行的CheckBox处于选中状态,则需要:
 响应ListCtrl的 LVN_ITEMCHANGED 消息:
 例如:

 ON_NOTIFY(LVN_ITEMCHANGED, IDC_LC_CONFIG, OnLvnItemchangedLcConfig)

void CRestorePage::OnLvnItemchangedLcConfig(NMHDR *pNMHDR, LRESULT *pResult)
{
 LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
 // TODO: 在此添加控件通知处理程序代码  
 if(m_LcConfig.GetCheck(pNMLV->iItem))  
  UnCheckOtherItem(m_LcConfig, pNMLV->iItem);
 *pResult = 0;
}

其中UnCheckOtherItem(...)的代码如下
void CRestorePage::UnCheckOtherItem(CListCtrl& listCtrl, int index)
{
 for (int i=0;i<listCtrl.GetItemCount();++i)
 {
  if(i == index)
   continue;
  listCtrl.SetCheck(i,FALSE);
 }
}



单击按钮弹出文件框

void CExportRegDlg::OnBtnExport() 
{
CString strFull;
GetDlgItem(IDC_EDIT1)->GetWindowText(strFull);
if(strFull.IsEmpty())
{
AfxMessageBox("请填入导出项!");
return;
}
CFileDialog dlg(FALSE,"reg",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Register File(*.reg)|*.reg||");
if(dlg.DoModal() == IDOK)
{
CString strFile = dlg.GetPathName();
CRegister re;
re.ShellExportRegister(strFull,strFile);
}
}


调用dll

void CTestAddDLLDlg::OnAdd() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	typedef int(*lpAddFun)(int, int); //宏定义函数指针类型
    HINSTANCE hDll; //DLL句柄 
	lpAddFun addFun; //函数指针
	hDll = LoadLibrary("..\\Debug\\AddDLL.dll");
	if (hDll != NULL)
	{
		addFun = (lpAddFun)GetProcAddress(hDll, "add");
		if (addFun != NULL)
		{
			int result = addFun(m_X, m_Y);
			CString s;
			s.Format("调用成功,结果为:%d",result);
			MessageBox(s);
		}
		FreeLibrary(hDll);
	}	
}

WinHttp获得返回内容转换

_variant_t varRspBody = pHttpReq->GetResponseBody();
	ULONG dataLen = varRspBody.parray->rgsabound[0].cElements;
	char *pContentBuffer = (char *)varRspBody.parray->pvData;
	CString strCntBuffer;
	strCntBuffer = pContentBuffer;


MFC全局变量拷贝赋值问题

主窗口声明一个全局变来那个extern char *gUserName;

子窗口有个变量char *UserName;

在子窗口拷贝赋值gUserName=UserName;

但是当子窗口销毁时,gUserName值就是乱码或者是默认设置定义,因为指向的指针地址已经不在

所以拷贝时

gUserName=strdup(UserName); 


mfc获得程序所在当前位置

<span style="white-space:pre">	</span>CString strFullName = AfxGetApp()->m_pszHelpFilePath ;
	char drive[_MAX_DRIVE];
	char dir[_MAX_DIR];	_splitpath(strFullName, drive, dir, NULL,NULL);
	CString strPath;
	strPath.Format("%s%s", drive, dir);

mfc Date-Time 使时间自增一天


用CTimeSpan。
CTime tm;
CTimeSpan ts(1,0,0,0); // 1天
tm = tm + ts;

拷贝自身文件到制定目录

#include "stdafx.h"
#include <Windows.h>

void CopySelf();

int _tmain(int argc, _TCHAR* argv[])
{
	CopySelf();
	return 0;
}
void CopySelf()
{
	TCHAR  szSelfName[MAX_PATH] ;
	TCHAR szWindowsPath[MAX_PATH];
	TCHAR szSystemPath[MAX_PATH];

	GetModuleFileName(NULL,szSelfName,MAX_PATH);//获得自身路径
	GetWindowsDirectory(szWindowsPath,MAX_PATH);
	GetSystemDirectory(szSystemPath,MAX_PATH);
	strcat(szWindowsPath,"\\test.exe");
	strcat(szSystemPath,"\\test.exe");
	CopyFile(szSelfName,szWindowsPath,FALSE);
	CopyFile(szSelfName,szSystemPath,FALSE);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值