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);
}