vc 使用点滴

来源:互联网 发布:适合学英语的动漫 知乎 编辑:程序博客网 时间:2024/05/04 12:23
  1、文件路径

TCHAR szPath[MAX_PATH];
  GetModuleFileName(NULL, szPath, MAX_PATH);
  lstrcpy(_tcsrchr(szPath, _T('\\')) + 1, _T("dll_tl\\VS_SoftDec.dll"));

  TCHAR szDll[MAX_PATH];
  PathCanonicalize(szDll, szPath);

//------------------------

 

2、

在创建多级文件夹时用 API CreateDirectory一级一级创建文件夹的方法很是麻烦,现在用SHCreateDirectoryEx一条语句就搞定下面是一个简单的示例:


#include<windows.h>

//注意这里一定要加shlobj.h
#include<shlobj.h>                                                          

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
 SHCreateDirectoryEx(NULL,"d:\\test\\program\\folder", NULL);
 return 0;
}

同时在链结的时候要加入shell32.lib,该函数各个参数具体的含义可以参考一下MSDN。 

//---------------------------------------------------------------

 

BOOL FindFirstFileExists(LPCTSTR lpPath, DWORD dwFilter)
{
    WIN32_FIND_DATA fd;
    HANDLE hFind = FindFirstFile(lpPath, &fd);
    BOOL bFilter = (FALSE == dwFilter) ? TRUE : fd.dwFileAttributes & dwFilter;
    BOOL RetValue = ((hFind != INVALID_HANDLE_VALUE) && bFilter) ? TRUE : FALSE;
    FindClose(hFind);
    return RetValue;
}

// 检查一个路径是否存在(绝对路径、相对路径,文件或文件夹均可)
BOOL FilePathExists(LPCTSTR lpPath)
{
    return FindFirstFileExists(lpPath, FALSE);
}

// 检查一个文件夹是否存在(绝对路径、相对路径均可)
BOOL FolderExists(LPCTSTR lpPath)
{
    return FindFirstFileExists(lpPath, FILE_ATTRIBUTE_DIRECTORY);
}

 

//-----------------------------------

WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
{
 DWORD dwMinSize;
 dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);

 if(dwSize < dwMinSize)


 {
  return FALSE;

 }


 WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE);

 return TRUE;

}

 

 

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

 

如果一个Custom Control控件没有和一个自定义的窗口类进行关联,这将导致你的对话框创建失败,无法现实出来。

要使用Custom Control,我们必须先写一个自定义的窗口类,例如CPieChartCtrl,派生自CWnd,

然后,在程序开始对这个窗口类进行注册,

BOOL CPieChartCtrl::RegisterWindowClass()
{
WNDCLASS wndcls;
HINSTANCE hInst = AfxGetInstanceHandle();

if (!(::GetClassInfo(hInst, BITMAPVIEWER_CLASSNAME, &wndcls)))
{
// otherwise we need to register a new class
wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.cbClsExtra = wndcls.cbWndExtra = 0;
wndcls.hInstance = hInst;
wndcls.hIcon = NULL;
wndcls.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
wndcls.hbrBackground = (HBRUSH) (COLOR_3DFACE + 1);
wndcls.lpszMenuName = NULL;
wndcls.lpszClassName = PIE_CHART_CTRL ;

if (!AfxRegisterClass(&wndcls))
{
AfxThrowResourceException();
return FALSE;
}
}

return TRUE;
}

最后在对话框的上面放一个Custom Control控件,例如:
ID:IDC_CUSTOM1
属性:class:PIE_CHART_CTRL //这是你注册的自定义窗口类
Style:0X50010000
ExStyle:0X0
在对话框的OnInitDialog()里m_wndChart.SubclassDlgItem(IDC_CUSTOM1, this);

对话框头文件里
CPieChartCtrl m_wndChart;

这样,就可以开始使用Custom Control了。

---------------------------------------------------------------------
使用 memcpy 取结构体地址时,注意要把结构体地址 转化为 char*,不然 &JGT+偏移量  结果不对