VC Skills 3

检查指定文件夹是否存在:PathIsDirectory()
方法一
检查给定路径是否根目录:BOOL PathIsRoot(LPCTSTR pPath);
说明:Returns TRUE for paths such as “/”, “ X:/”, “// server/ share”, or "// server/".Paths such as "../path2" will return FALSE.
用这两个函数要先:#include ;
再把这个文件加入工程:shlwapi.lib
方法二
GetFileAttributes检查文件是否存在,并且检查是否文件夹属性FILE_ATTRIBUTE_DIRECTORY
----------------------------------------------------------
DWORD = GetFileAttributes(_T("f://win98"));
if(dwAttr != 0xFFFFFFFF && (dwAttr & FILE_ATTRIBUTE_DIRECTORY))
cout<<"exist"<

else
cout<<"NOT exist"< ----------------------------------------------------------
方法三
用下面第113条的_access函数同样可以
----------------------------------------------------------
if(_access("f://win98",0)!=-1)
 cout<<"exist"< else
cout<<"NOT exist"< ----------------------------------------------------------
方法四:
用PathFileExists函数,见MSDN介绍,需要的条件同方法一。
还有一个:BOOL SHGetPathFromIDList(LPCITEMIDLIST pidl,LPTSTR pszPath);
   Converts an item identifier list to a file system path.

去掉单文档标题栏上的"无标题-"

http://community.csdn.net/Expert/topic/4454/4454093.xml?temp=.2896997
打开显示器: ::SendMessage(GetSafeHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, -
关闭显示器: ::SendMessage(GetSafeHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER,
得到它的工作状态:
休眠状态是指用SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1)关闭的
--------------------------------------------------------------------------------
The GetDevicePowerState function is supposed to retrieve the current power state of the specified device. However, Apps may fail to use GetDevicePowerState on the display, as they can't get a handle on "//./Display#", while the # index is 1-based, or "//./LCD", for security reasons.
If you are trying to do this on Windows XP, then you can use SetupDiGetDeviceRegistryProperty and Property: SPDRP_DEVICE_POWER_DATA to get the power management information. This is documented in the Windows XP DDK.
The WMI Class Win32_DesktopMonitor does not report the power state. use SPI_GETPOWEROFFACTIVE or DeviceIOControl with IOCTL_VIDEO_GET_POWER_MANAGEMENT will simply reports power management is enabled or not. SPI_GETPOWEROFFACTIVE just determines whether the power-off phase of screen saving is enabled or not.
BTW, you can always use the SetThreadExecutionState or other APIs (you have used) to switch ON the monitor no matter the monitor is in the ON or OFF state.
References
http://msdn.microsoft.com/library/en-us/Display_r/hh/Display_r/VideoMiniport_Functions_b47b2224-5e0b-44af-9d04-107ff1299381.xml.asp
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_desktopmonitor.asp

得到系统时间、语言等的设置
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITIME, lpLCData, cchData);

文件是否存在(记得先包含头文件#include )
----------------------------------
if(_access("c://somefile.txt",0)!=-1)
//存在
else
//不存在
---------------------------------
还有一个方法:
---------------------------------------------
if(GetFileAttributes("f://test.txt")!=0xFFFFFFFF)
{
 //存在
}
else
{
 //不存在
}

----------------------------------------------
在CStatic上面关联图片
----------------------------------------------
CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC);
pWnd->ModifyStyle(0, SS_BITMAP);
//只能显示.bmp文件

pWnd->SetBitmap((HBITMAP)::LoadImage(0, "c://zzzzz.bmp",
IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION |LR_DEFAULTSIZE |LR_LOADFROMFILE));

 

----------------------------------------------
显示文件夹浏览对话框, 得到用户选择的文件夹
----------------------------------------------
 char szDir[MAX_PATH];
 BROWSEINFO bi;
 ITEMIDLIST *pidl;
 bi.hwndOwner = this->m_hWnd;
 bi.pidlRoot = NULL;
 bi.pszDisplayName = szDir;
 bi.lpszTitle = "请选择目录";//strDlgTitle;
 bi.ulFlags = BIF_RETURNONLYFSDIRS;
 bi.lpfn = NULL;
 bi.lParam = 0;
 bi.iImage = 0;

 pidl = SHBrowseForFolder(&bi);
 if(pidl == NULL)
  return;
 if(!SHGetPathFromIDList(pidl, szDir))
  return;

 AfxMessageBox(szDir); //szDir中存放的内容为用户选定的目录

-----------------------------------------
去除字符串中指定的字符:

-----------------------------------------
CString strtemp;
strtemp.Format("%s","abc/n123/ndef");
strtemp.Remove('/n'); //这里以去除换行符为例,结果保存在strtemp中了


假如当前时间2005-09-09,如何计算在该时间前12345天,是哪年哪月哪日?
---------------------------
CTime tm(2005,9,9,0,0,0);
tm-=86400*12345;
cout< ----------------------------

PeekMessage是干什么用的: http://community.csdn.net/Expert/topic/4462/4462828.xml?temp=.8852045

拖动控件时实现类似windows拖动窗口的效果:CRectTracker
Mackz朋友的blog中有它的范例
:http://blog.csdn.net/Mackz/archive/2005/10/27/517747.aspx

有关UNICODE、ANSI字符集和相关字符串操作的总结:http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=199372
 
寻找系统中的打印机:EnumPrinters 
 
用代码加入外部模块的方法:#pragma comment(lib,"mylib.lib")
 
判断指定点是否在一个矩形框内:CRect::PtInRect(POINT point)
 
winAPI 函数GetTextExtentPoint32()可以得出一个以像素为单位的字符串的宽度
 
RGB转换成YV12(YUV 4:2:0)的方法:http://www.fourcc.org/fccyvrgb.php
 
获得指定进程占用内存的情况,用GetProcessMemoryInfo()函数。
 
把CONSOLE程序的输出导入到文件中,用程序控制:http://community.csdn.net/Expert/topic/4403/4403431.xml?temp=.7469599
 http://www.codeproject.com/dialog/quickwin.asp
 
把CRichEditCtrl中的文字保存到rtf文件:http://community.csdn.net/Expert/topic/4478/4478640.xml?temp=.1313135 
 
在codeproject上还有从CRichEditCtrl类派生新类的,功能增强了很多:http://www.codeproject.com/richedit/autoricheditctrl.asp
 
还有一个开发类似写字板那样程序的完整范例:http://www.codeproject.com/tools/simplewordpad.asp
 
MFC中使用ATL字符转换宏:在你的函数开关加上USES_CONVERSION;语句,详见MSDN或这里:http://community.csdn.net/Expert/topic/4479/4479609.xml?temp=.6256983
 
如何建立共享目录:直接调用标准的Win32API函数NetShareAdd和NetShareDel
 详见MSDN及:http://community.csdn.net/Expert/topic/4481/4481371.xml?temp=.4405023
 
位图文件读写基础:http://www.vckbase.com/document/viewdoc/?id=674
 
用VC实现支持多语言的程序:http://www.vckbase.com/document/viewdoc/?id=1102

在属性页控件的标签上加图片:http://www.codeguru.com/cpp/controls/propertysheet/article.php/c611/
http://community.csdn.net/Expert/topic/4492/4492593.xml?temp=.9977991
--------------------------------------------------
BOOL CMyPropSheet::OnInitDialog()
{
 BOOL bResult = CPropertySheet::OnInitDialog();
 m_imageTab.Create( IDB_TABIMAGES, 13, 1, RGB(255,255,255) );
 CTabCtrl *pTab = GetTabControl();
 pTab->SetImageList( &m_imageTab );
 
 TC_ITEM tcItem;
 tcItem.mask = TCIF_IMAGE;
 for( int i = 0; i < 3; i++ )
 {
  tcItem.iImage = i;
  pTab->SetItem( i, &tcItem );
 }

 return bResult;
}
这里有很多CRichEditCtrl控件的高级用法:http://www.codeguru.com/Cpp/controls/richedit/
CGridCtrl控件的一些应用:http://www.vckbase.com/code/listcode.asp?mclsid=3&sclsid=327
一个不错的地方:http://www.vckbase.com/document/listdoc.asp?mclsid=3&sclsid=323
怎样使右键菜单也能变灰、打勾:http://community.csdn.net/Expert/topic/4501/4501123.xml?temp=.4074823
 
MD5加密解密的API:http://community.csdn.net/Expert/topic/4502/4502325.xml?temp=.6894647
MD5Init
MD5Final
MD5Update


用CBrush::CreateStockObject(HOLLOW_BRUSH);或CBrush::CreateStockObject(NULL_BRUSH);这两个可以创建镂空的画刷
创建不规则窗体:http://www.vckbase.com/document/viewdoc/?id=1345
拖动一个没有标题栏的窗体:http://community.csdn.net/Expert/topic/4499/4499796.xml?temp=6.763858E-02
屏蔽浏览器中的弹出广告,下面地址中是在ATL中采用BHO服务的方法:http://www.codeproject.com/atl/popupblocker2.asp
CSDN上有个讨论贴:http://community.csdn.net/Expert/topic/4496/4496918.xml?temp=.157284
远程线程注入
http://www.codeproject.com/threads/RmThread.asp
http://www.codeproject.com/library/InjLib.asp
http://www.codeproject.com/win32/Remote.asp
CEditView中两个函数的用法:
GetEditCtrl().ModifyStyle (0 , WS_VSCROLL |ES_AUTOHSCROLL |ES_AUTOVSCROLL |WS_HSCROLL |ES_WANTRETURN | ES_MULTILINE);
GetEditCtrl().GetSel(m_nStartChar, m_nEndChar ) ;
给对话框窗体底部加上状态条,把下面代码加进对话框的OnInitDialog()函数中:
-----------------------------------------------------------
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
//下面m_wndStatusBar必须先在对话框类中声明:CStatusBar m_wndStatusBar;
if (!m_wndStatusBar.Create(this,WS_CHILD|WS_VISIBLE|WS_BORDER)||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
AfxMessageBox("Status Bar not created!", NULL, MB_OK );
}
CRect rect;
this->GetWindowRect(&rect);
m_wndStatusBar.MoveWindow(2,rect.bottom-GetSystemMetrics(SM_CYSIZE)-27,rect.Width()-4,20);
m_wndStatusBar.ShowWindow(SW_SHOW);
m_wndStatusBar.SetWindowText("Ready");
-----------------------------------------------------------
把上面代码加在OnInitDialog里,注意:m_wndStatusBar变量的声明语句CStatusBar m_wndStatusBar;要放在你的对话框类C****Dlg中才行。


从注册表中读取cpu的频率:
读取 ~MHz 这个键值 ,记住那键前有个~别忘了,在注册表的HKEY_LOCAL_MACHINE//Hardware//Description//System//CentralProcessor//0 //0 为第一个cpu Hardware//Description//System//CentralProcessor//1 //1 为第二个cpu 得到cpu的数量,摘自:http://community.csdn.net/Expert/topic/4635/4635246.xml?temp=.7182123
-----------------------------------------------------------------------
SYSTEM_INFO siSysInfo;
GetSystemInfo(&siSysInfo);
printf(" Number of processors: %u/n", siSysInfo.dwNumberOfProcessors);

我的程序知道一个应用程序的句柄,如何使该应用程序得到焦点:http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=192872
---------------------------------------------------------------
if(::GetForegroundWindow()!=m_MainWnd)
 ::SetForegroundWindow(m_MainWnd);
 ::SetFocus( m_MainWnd);
 ---------------------------------------------------------------
 或:
 ------------------------------------
 ::ShowWindow(m_MainWnd, SW_SHOW);
 ::SetForegroundWindow(m_MainWnd);
 ------------------------------------
 在对话框的标题栏上添加按钮:http://www.codeguru.com/Cpp/W-D/dislog/titlebar/article.php/c1897


 判断当前线程的当前输入法是中文还是英文输入法(至于到底是哪种中文输入法我也不知道):
 HKL hKl = GetKeyboardLayout(0); //这里0表示当前线程,要查指定线程的话可以用指定线程的标识符代替
if (ImmIsIME(hKl))
AfxMessageBox("当前是中文输入法。");

其它地区语言输入法的信息在MSDN中搜索:Table of Language Identifiers

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

动态创建静态控件并加载.bmp图片,先在对话框类中定义成员变量:
 ----------------------------------------------------
 public:
 CStatic m_pp; //这个是在对话框类中定义的
 再:
 CBitmap cb;
 cb.LoadBitmap(IDB_BITMAP1);
 m_pp.Create("",WS_CHILD|WS_VISIBLE|SS_BITMAP,CRect(10,10,200,200),this,101);
 m_pp.SetBitmap((HBITMAP)cb);


把图片中某种指定色变成透明色,在对话框的OnPaint()中加入类似如下代码:

 //CImage imgOriginal;
 int XWitdh=imgOriginal.GetWidth();
 int XHeight=imgOriginal.GetHeight();
 COLORREF TransparentColor= RGB(0x00,0x00,0x00); //这里黑色变成透明色
 CPaintDC dc(this);
 imgOriginal.TransparentBlt(dc.m_hDC,0,0,XWitdh,XHeight,TransparentColor);
 imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth()/2,imgOriginal.GetHeight()/2,SRCCOPY);

怎么修改MFC单文档程序的标题,经常有人在网上问这个问题,在C****App::InitInstance()的代码中加入一行就行了:
-----------------------------------------------------------
BOOL CJPGGifApp::InitInstance()
{
 AfxEnableControlContainer();
 ...... //这里省略自动生成的代码
 // The one and only window has been initialized, so show and update it.
 m_pMainWnd->ShowWindow(SW_SHOW);
 m_pMainWnd->UpdateWindow();
 m_pMainWnd->SetWindowText("我的标题"); //加入这一行就可以了,注意要加在ShowWindow和UpdateWindow的后面

 return TRUE;
}

怎么使用双缓冲防闪烁:http://community.csdn.net/Expert/topic/4236/4236258.xml?temp=5.736941E-02

鼠标左右键同时按下与鼠标与键盘同时按下的识别:http://www.vckbase.com/article/misc/0017.htm

玩过Windows的扫雷游戏吗?该游戏中就有一个同时按下鼠标左右键的操作,其实对同时按下鼠标左右键的判断并不复杂,判断方法与判断鼠标按键是否与Ctrl和Shift同时按下的方法相同,这里要用到鼠标消息中的wparam项,其中含有我们想要的几个按键的状态。定义如下:

(1)MK_CONTROL:Ctrl键按下时置1;

(2)MK_LBUTTON:鼠标左键按下时置1;

(3)MK_MBUTTON:鼠标中键按下时置1;

(4)MK_RBUTTON:鼠标右键按下时置1;

(5)MK_SHIFT:Shift键按下时置1。

通过判断这几个标志位可以得到同时按下的几个键的状态,从而判断是否有其它键同时按下。

让编译器忽略某种警告
 --------------------------------
 #pragma warning (disable : 4101)
 --------------------------------
 上面的代码加上后编译器不会再出现warning C4101: 'i' : unreferenced local variable这样的警告了。

枚举网页各个元素,参考:
 http://www.vckbase.com/document/viewdoc/?id=288
 http://www.vckbase.com/document/viewdoc/?id=1446

rundll32.exe,这个程序很方便,用它可以调用任何 DLL 中的函数。你只要给它提供 DLL、函数名以及要传递的参数即可。Rundll32.exe 绝对多才多艺,你可以用它来关闭和重启 Windows,创建快捷方式以及启动控制面板程序。只要知道要调用的DLLs,一切都搞掂。你可以象下面这样用 rundll32.exe 从命令行打开一个 URL:
 --------------------------------------------------------
 rundll32.exe url.dll,FileProtocolHandler www.vckbase.com
 --------------------------------------------------------
 url.dll 中的函数 FileProtocolHandler 负责这个工作。

HDC===>CDC*
 ----------------------------------
 HDC hdc=::GetWindowDC(this->m_hWnd); //获得窗口标题栏区域
 CDC* pDC = CDC::FromHandle(hdc);
 ----------------------------------
CDC*===>HDC,可以通过CDC的操作符HDC()来实现:
 ------------------
 HDC hdc=HDC(pDC); //或:HDC hdc=pDC->m_hdc;
 ------------------

操作状态栏,下面以在状态栏中显示鼠标当前坐标为例,代码如下:
 -------------------------------------------------------------------------------------------
CMyView::OnMouseMove(UINT nFlag,CPoint point)
{
 CClientDC dc(this);
 CMainFrame *pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
 CStatusBar *pStatusBar = (CStatusBar *)&pFrame->m_wndStatusBar;
 CString str;
 str.Format("x:%d,y:%d",point.x,point.y);
 CSize size = dc.GetTextExtent(str); //得到文本所需的大小尺寸
 int nIndex = pStatusBar->CommandToIndex(ID_INDICATOR_MOUSEPOS);
 pStatusBar->SetPaneInfo(nIndex,ID_INDICATOR_MOUSEPOS,SBPS_NORMAL,size.cx); //按文本所需的宽度设置状态栏宽度
 pStatusBar->SetPaneText(nIndex,str);

GetDeviceCaps,一个可得到很多关于指定设备的具体信息的函数

注册表中:HKEY_CURRENT_USER/KeyboardLayout/preload分支下分别有输入法对应的1、2、3、4几个主键,其键值一一对应已安装的输入法,如:1的键值00000409是英文输入法,知道具体输入法和键值的对应关系后,我们可以根据得到的键值判断用户的当前输入法了。

在托盘区处显示气泡提示:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/ifaces/iusernotification/SetBalloonInfo.asp

设置对话框的背景色的简单方法,其实只要在CWinapp的InitInstance的里面添加一行代码就行了:
 ---------------------------------------------------------
 BOOL CBOOKApp::InitInstance()
 {
 AfxEnableControlContainer();
 SetDialogBkColor(RGB(213,240,227),RGB(173,7,95)); //添加这行,前者为背景色,后者为前景色
 .....
 }
 CView::OnMouseMove(nFlags, point);
}

显示gif动画表情的CRechEdit控件:http://lzzqqq.blogchina.com/2819759.html


单文档程序,如何使程序窗口一开始就固定在某一尺寸:PreCreateWindow中指定大小.可以去掉框架窗口的WS_THICKFRAME风格来使窗口不可改变大小,可以选择性的去掉WS_MAXIMIZEBO风格。也可以处理WM_GETMINMAXINFO消息来限制视图的大小。


CSpinButtonCtrl:http://www.ruanxun.com/HArticle78020.aspx
限制用户调整窗口的最大、最小尺寸,在窗口的WM_GETMINMAXINFO消息响应函数中处理,如:

void CQQDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
 // TODO: Add your message handler code here and/or call default
 lpMMI->ptMinTrackSize.x=200; //限制最小宽度,单位为像素,下同
 lpMMI->ptMinTrackSize.y=400; //限制最小高度
 lpMMI->ptMaxTrackSize.x=250; //限制最大宽度
 lpMMI->ptMaxTrackSize.y=500; //限制最大高度
 CDialog::OnGetMinMaxInfo(lpMMI);
}

获取桌面所有图标的标题,代码示范了如何使用VirtualAlloc(),WriteProcessMemory() 和 ReadProcessMemory() 在不同的进程中分配内存。用Windows的消息获得图标的名称:
下载源码:http://www.vckbase.com/code/listcode.asp?mclsid=1&sclsid=101&page=6

一台机器可能有不止一个CD-ROM驱动器。现在CD-ROM已经是PC机的标准配置,此外再装个可擦写的光盘驱动,甚至是DVD都是很常见的事情。不管一台机器上装多少个不同的驱动器,如何找到它们呢?下载源码:http://www.vckbase.com/code/listcode.asp?mclsid=1&sclsid=101&page=6

做一个类似文件快捷方式中查找目标的功能,Net 2003中的MSDN,找到了可以实现该功能的API,SHOpenFolderAndSelectItems()函数.....本程序可以调用Explore打开指定文件夹,并把指定文件置为选定状态,下载源码:http://www.vckbase.com/code/listcode.asp?mclsid=1&sclsid=101

字符串转为Unicode
-----------------------------------------------------------------
 WCHAR wsz[MAX_PATH];
 CString str="字符串";
 #ifdef _UNICODE
 wcscpy(wsz, str); //如果工程支持Unicode的话用wcscpy函数
 #else
 //工程不支持的话用MultiByteToWideChar函数转换
 MultiByteToWideChar(CP_ACP, 0, str, -1, wsz, MAX_PATH);
 #endif
 -----------------------------------------------------------------
也可以用c的函数库的函数:
 mbtowc 转一个字符
 mbstowcs 转字符串

设置CListCtrl控件图标间距离的方法:CListCtrl::SetIconSpacing

设置层叠窗口的透明色函数:SetLayeredWindowAttributes,部分代码参考:
 -------------------------------------------------------------------------
 SetWindowLong(this->m_hWnd,GWL_EXSTYLE,GetWindowLong(this->m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);
 HWND hWnd=this->m_hWnd;
 typedef DWORD (WINAPI *PSLWA)(HWND, DWORD, BYTE, DWORD);
 PSLWA pSetLayeredWindowAttributes;
 HMODULE hDLL = LoadLibrary ("user32");
 pSetLayeredWindowAttributes = (PSLWA) GetProcAddress(hDLL,"SetLayeredWindowAttributes");
 if (pSetLayeredWindowAttributes != NULL)
 {
 pSetLayeredWindowAttributes (hWnd,0,20,LWA_ALPHA);
 }
 FreeLibrary(hDLL);

关于滚动条方面的,GetScrollInfo获得滚动条位置信息
 ------------------------------------
 SCROLLINFO si;
 ZeroMemory(&si, sizeof(si));
 si.cbSize = sizeof(si);
 si.fMask = SIF_TRACKPOS;
 // Call GetScrollInfo to get current tracking position in si.nTrackPos
 GetScrollInfo(hwnd, SB_HORZ, &si);
 -----------------------------------
     让滚动条滚动需要发送相应的WM_VSCROLL和WM_HSCROLL消息:
 SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ;
 SetScrollInfo函数改变滚动条的位置。
切换到软键盘:call ImmSetConversionStatus with IME_CMODE_SOFTKBD
用SetVolumeLabel函数修改U盘卷标时据说windows会刷新里面的内容

基于对话框的MFC程序想要具有打印功能:http://community.csdn.net/Expert/topic/4557/4557847.xml?temp=.5908472

打开那个标题为"打开方式..."的对话框来选择程序

WinExec("rundll32.exe shell32.dll,OpenAs_RunDLLpath/filename",SW_RESTORE);
如何屏蔽主窗口的最大化按钮,并让其自动最小化:http://community.csdn.net/Expert/topic/4563/4563807.xml?temp=.9465906

从立体声的wave文件中分别提出左声道和右声道的声音数据,实现音频文件的播放——单声道录音、立体声录音并保存为.wav文件,以及VC.NET简单实现GIF动画:
http://www.vckbase.com/code/listcode.asp?mclsid=7

拖动一个没有标题栏的窗口:

     void CMyControl::OnLButtonDown(UINT nFlags, CPoint point)
 {
 // TODO: Add your message handler code here and/or call default
 UNUSED_ALWAYS(nFlags);
 if (!(GetWindowLong(m_hWnd, GWL_STYLE) & WS_CHILD))
 PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
 else
 GetParent()->PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
 }

用指定字体在dc中写字:
 -------------------------------------------------------
 HDC hdc = ::GetDC(NULL);
 HFONT hfont,holdfont;
 hfont = (HFONT)GetStockObject(OEM_FIXED_FONT);
 holdfont = (HFONT)SelectObject(hdc,hfont);
 TextOut(hdc,10,50,"/1/2/3/4",8);
 SelectObject(hdc,holdfont);
 DeleteDC(hdc);

桌面主题更改的消息:WM_THEMECHANGED
修改菜单项的名称:
 CMenu *pMenu = AfxGetMainWnd()->GetMenu()->GetSubMenu(0);
 pMenu->ModifyMenu(0,MF_BYPOSITION,0,"Test");

__LINE__表示本行代码在程序中第几行,同样:__FILE__表示当前文件的全路径
 ----------------------------------
 CString str;
 str.Format("Line is %d", __LINE__); //指这行
 AfxMessageBox(str);


一直以来,想实现窗口透明程度不同,或局部透明,局部不透明,但这也只是梦想,下面这个函数看来可以让我们梦想成真:UpdateLayeredWindow

LOGFONT各成员的意义

 LOGFONT lf;
 lf.lfHeight=-80; //字体字符的高度
 lf.lfWidth=0; //字符平均宽度
 lf.lfEscapement=45; //文本行逆时针旋转45度
 lf.lfOrientation=0; //字符角度
 lf.lfWeight=FW_HEAVY; //字符的粗细度
 lf.lfItalic=FALSE; //倾斜
 lf.lfUnderline=FALSE; //下划线
 lf.lfStrikeOut=FALSE; //删除线
 lf.lfCharSet=GB2312_CHARSET; //中文字符集
 lf.lfOutPrecision=OUT_STROKE_PRECIS; //字体输出结果和要求的匹配程度
 lf.lfClipPrecision=CLIP_STROKE_PRECIS; //如何裁剪落于裁剪区之外的字符
 lf.lfQuality=DRAFT_QUALITY; //字体属性匹配的精确程度
 lf.lfPitchAndFamily=VARIABLE_PITCH | FF_MODERN; //字体间距和字体族
 strcpy(lf.lfFaceName,"楷体_GB2312"); //楷体
 m_font.CreateFontIndirect(&lf); //m_font为类的成员变量:CFont m_font;


去除F1的帮助功能,重载WM_HELPINFO消息:
 ------------------------------------------------------
 BOOL CYourdlgDlg::OnHelpInfo(HELPINFO* pHelpInfo)
 {
 return TRUE;//CDialog::OnHelpInfo(pHelpInfo);
 }

你可能感兴趣的:(windows,null,mfc,Access,输入法,winapi)