馒头渣!

来源:互联网 发布:找对象学历重要吗 知乎 编辑:程序博客网 时间:2024/04/29 01:43

1。vc-打印源码中文件名和行号常用的宏名什么?
文件名:__FILE__       行号:__LINE__

2。vc-限制Edit只能输入0-F

WNDPROC wpOrigEditProc;
LRESULT CALLBACK wpSubclassEditProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam);

wpOrigEditProc = (WNDPROC) SetWindowLong(GetDlgItem(IDC_EDIT_DATA)->m_hWnd,
                GWL_WNDPROC, (LONG) wpSubclassEditProc);

LRESULT CALLBACK wpSubclassEditProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam)
{
 switch(uiMsg)
 {
 case WM_CHAR:
  if((wParam >= 0x30 && wParam <= 0x39) ||
     (wParam >= 0x41 && wParam <= 0x46) ||
     (wParam >= 0x61 && wParam <= 0x66) ||
     (wParam == 0x08) || wParam == 0x20 || wParam == 0x0D)
  {
   return CallWindowProc(wpOrigEditProc,hDlg,uiMsg,wParam,lParam);
  }
  else
  {
   if(GetKeyState(VK_CONTROL) & 0x8000)
   {
    return CallWindowProc(wpOrigEditProc,hDlg,uiMsg,wParam,lParam);
   }
   return true;
  }
  break;
 }
 return CallWindowProc(wpOrigEditProc,hDlg,uiMsg,wParam,lParam);

 

3.修改文件扩展名函数,PathRenameExtension,msdn还有以Path打头的其他函数,如PathRemoveFileSpec(去掉文件名,保留路径)等

4.添加ToolTips

//API方式

TOOLINFO ti;
  hwndTT = CreateWindowEx(WS_EX_TOPMOST,TOOLTIPS_CLASS,NULL,
        WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP |
        WS_EX_TOOLWINDOW,  
        CW_USEDEFAULT,CW_USEDEFAULT,
        CW_USEDEFAULT,CW_USEDEFAULT,
        hwnd,NULL,/*ghInstance*/NULL,NULL);
  
  GetClientRect (GetDlgItem(hwnd,IDC_BTN_TOOLTIP), &rect);
 
  ti.cbSize = sizeof(TOOLINFO);
  ti.uFlags = TTF_SUBCLASS;
  ti.hwnd = GetDlgItem(hwnd,IDC_BTN_TOOLTIP);
  ti.hinst = ghInstance;
  ti.uId = IDC_BTN_TOOLTIP;
  ti.lpszText = "Button Tool Tip String";
        // ToolTip control will cover the whole window
  ti.rect.left = rect.left;   
  ti.rect.top = rect.top;
  ti.rect.right = rect.right;
  ti.rect.bottom = rect.bottom;
  
  /* SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW */
  SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM)&ti);

//mfc方式

1,   对话框类添加成员:  
      CToolTipCtrl   m_ToolTips;
2,   在对话框   OnInitialUpdate   中添加
      m_ToolTips.Create(this);
      m_ToolTips.AddTool(GetDlgItem(IDC_MY_COMBO_BUTTON_XXX),TEXT("This   is   tooltip"));
3,   在对话框类的           PreTranslateMessage(MSG*   pMsg)
      添加
      switch(pMsg-> message)
{
case   WM_MOUSEMOVE:
m_ToolTips.RelayEvent(pMsg);
break;
}

5.第一个问题:
console程序如果禁止用户点击右上角的X关闭?如何禁止用户使用Ctrl+C或者Ctrl+Break关闭?

SetConsoleCtrlHandler来设置Ctrl+C的句柄.


第二个问题:
使用printf显示到console上的字符,最多只能显示300行,如果可以增加这个数值或者是不限制?

用SetConsoleScreenBufferSize更改缓冲区大小.

6.获取动态库本身路径!

GetModuleFileName(NULL,       buf,       MAX_PATH);   取的是exe的路径

GetModuleFileName的第一个参数用Dll的句柄就可以取Dll的路径

dll的句柄从DllMain中得到,然后调用GetModuleFileName

7.如何在动态库中能调用主程序中的函数

dll的头文件里

typedef   void   (__stdcall   *PFN_MYCALLBACK)(char   *);
XXX_API   void   __stdcall   SetCallbackFun(PFN_MYCALLBACK   pCallbackFun);

调用者的cpp文件里
void   __stdcall   CallbackFunction(char   *strResult)
{
.....
}

SetCallbackFun(CallbackFunction);

8.如何枚举WINXP已登录的帐户

BOOL       GetLogUserXP(HANDLE   hServer,   DWORD   dwSessionID,   CString&   strName)  
{  
BOOL       bRet       =       FALSE;  
strName       =       _T(   "   ");  

//for       xp       or       above  
TCHAR       *szLogName       =       NULL;  
DWORD       dwSize       =       0;  
if       (WTSQuerySessionInformation(hServer,  
dwSessionID,  
WTSUserName,  
&szLogName,  
&dwSize))  
{  
strName       =       szLogName;  
WTSFreeMemory(szLogName);  
bRet       =       TRUE;  
}  

return       bRet;  
}

void   CLKTestDlg::OnBnClickedButton12()
{
        HANDLE   hServer;
        hServer   =   WTSOpenServer(NULL);
        WTS_SESSION_INFO   *si;
        DWORD   dwSiCount;
        CString   strUserName;
        if(hServer)
        {
                WTSEnumerateSessions(hServer,0,1,&si,&dwSiCount);

  for(int   i   =   0;   i   <   dwSiCount;   i++)
  {
  //AfxMessageBox(si[i].pWinStationName);
  if(GetLogUserXP(hServer,   si[i].SessionId,   strUserName))
  {
  AfxMessageBox(strUserName);
  }
  }
  }

  WTSFreeMemory(si);
                  WTSCloseServer(hServer);
        }
}
9.为什么ON_COMMAND_RANGE事件会被VC自动从 message map中移除

不要把这些宏写进   afx_msg   区域内,否则每次利用   ClassWizard   添加新的类或重载函数时,ClassWizard   会把   ON_COMMAND_RANGE当作不规范的语法删除。

10.如何具体判断一个字符串中哪个是英文字母

函数isalpha

11.在注册表中如何得到所有安装了的应用程序程序的信息

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall
下面的子鍵

12.vista64下操作注册表遭遇重定向问题

PVOID   OldValue;
HINSTANCE   hlibrary;
typedef     int         (__stdcall   *   Wow64DisableWow64FsRedirection)(LPVOID);
YWow64DisableWow64FsRedirection   f_Wow64DisableWow64FsRedirection   =   NULL;
typedef     int         (__stdcall   *   Wow64RevertWow64FsRedirection)(LPVOID);
Wow64RevertWow64FsRedirection   f_Wow64RevertWow64FsRedirection   =   NULL;

hlibrary   =   LoadLibrary("Kernel32.dll");
f_Wow64DisableWow64FsRedirection   =   (Wow64DisableWow64FsRedirection)   GetProcAddress(hlibrary,"Wow64DisableWow64FsRedirection");
if(!f_Wow64DisableWow64FsRedirection)
{
}
f_Wow64DisableWow64FsRedirection   (&OldValue);

//这里写注册表操作函数,Open的时候要指定   KEY_WOW64_64KEY标志

f_Wow64RevertWow64FsRedirection   =   (Wow64RevertWow64FsRedirection)   GetProcAddress(hlibrary,"Wow64RevertWow64FsRedirection");
if(!f_Wow64RevertWow64FsRedirection)
{
}
f_Wow64RevertWow64FsRedirection   (OldValue);
FreeLibrary(hlibrary);

13.多线程 事件激发问题

在Windows下你可以使用CreateEvent来创建一个事件。如果你为这个事件指定名字,那么如果操作系统中没有同样名字事件的话,会创建一个有名字的事件,否则会返回一个现存事件的句柄。你也可以用OpenEvent来访问一个现存的事件。关于事件的触发和响应,参考Using   Event   Objects

14.怎么使用系统默认浏览器在新窗口打开网页

CString   args;
args.Format(_T("url.dll,FileProtocolHandler %s"),   lpszURL);//此方法得不到错误返回代码
HINSTANCE   result   =   ShellExecute(NULL,   _T("open"),   _T("rundll32.exe"),   args,   NULL,   SW_SHOWNORMAL);
return   result;

ps:

ShellExecute是我们常用的一个API,可以运行程序,打开网页。

ShellExecute(NULL,   "open",   "http://www.csdn.net",   NULL,NULL,SW_SHOWMAXIMIZED);

这样可以打开一个网页,但不是在新IE中打开,改成下面方式时就可以在一个新的IE中打开网页了

ShellExecute(NULL,   "open",   "IEXPLORE",   "http://www.csdn.net",   NULL,SW_SHOWMAXIMIZED);  

15.怎么清除串口的输入缓冲啊

PurgeComm(hCom,PURGE_TXABORT   ¦   PURGE_RXABORT   ¦   PURGE_TXCLEAR   ¦   PURGE_RXCLEAR   );  

16.判断出当前系统是xp x64还是server 2003 x64

第一加载Kernel32.dll中的文件重定向函数,如果失败则说明是32位系统,成功则说明是64系统,但是存在函数实际存在但加载失败的情况,虽然估计这种情况比较少见
第二步是读注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows   NT/CurrentVersion/ProductName来判断系统

17.知道进程ID,如何获取此进程对应的主窗口的Title

定义一个回调函数,用EnumWindows来枚举窗口,GetWindowThreadProcessId获得窗口进程ID,匹配的话则读取窗口caption

18.delphi 中存在重名的情况下,如何再类中引用全局变量

使用单元名加变量就可以了

19.为什么通过GetParent()访问不到对话框所属的视类?

子窗口是不可以作为Dialog的父窗体的,至少MFC中是不能。
//   a   popup   window   cannot   be   owned   by   a   child   window
while   (hWnd   !=   NULL   &&   (::GetWindowLong(hWnd,   GWL_STYLE)   &   WS_CHILD))
hWnd   =   ::GetParent(hWnd);


如果想获得Dialog的父窗体,请使用Dialog::m_pParentWnd。

20.如何获得USB设备的Product ID,Vendor ID等信息

#include <stdio.h> #include <windows.h>
#include
<Setupapi.h>
#include
<InitGuid.h>//这句话很重要,否则链接的时候出错!


//GUID GUID_CLASS_I82930_BULK;
/////////////////////////////////////////////////////////////////////////////
// {6068EB61-98E7-4c98-9E20-1F068295909A}
DEFINE_GUID(GUID_CLASS_I82930_BULK,
0x394fe679, 0xe65f, 0x4eab, 0x8d, 0x30, 0xe8, 0x9d, 0xbf, 0x6a, 0x4a, 0x89);

BOOL GetHardwareIDByInterfaceGUID(GUID
* pGuid, DWORD instance,char* buffer,int bufferSize)
{
   
// Get handle to relevant device information set
    HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
   
if(info==INVALID_HANDLE_VALUE)
    {
        printf(
"No HDEVINFO available for this GUID/n");
       
return FALSE;
    }

   
// Get interface data for the requested instance
    SP_INTERFACE_DEVICE_DATA ifdata;
    ifdata.cbSize
= sizeof(ifdata);
   
if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata))
    {
        printf(
"No SP_INTERFACE_DEVICE_DATA available for this GUID instance/n");
        SetupDiDestroyDeviceInfoList(info);
       
return FALSE;
    }

    SP_DEVINFO_DATA did
= {sizeof(SP_DEVINFO_DATA)};

   
//得到class GUID
    SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, NULL, &did);


   
//得到hardwareid的名字
    SetupDiGetDeviceRegistryProperty(info,
                    
&did,
                     SPDRP_HARDWAREID,
                     NULL,
                     (PBYTE)buffer,
                     bufferSize,
                     NULL);

    SetupDiDestroyDeviceInfoList(info);
   
   
return TRUE;
}


int main()
{
   
char buffer[1024];
    GetHardwareIDByInterfaceGUID((LPGUID)
&GUID_CLASS_I82930_BULK,0,buffer,sizeof(buffer));
    printf(
"HardwareID is %s/n",buffer);
   
return 0;
}

21.修改注册表后会产生什么消息

RegNotifyChangeKeyValue

22.获得当前移动磁盘的盘符

CString str = _T("z://");
   
for( char ch = 'z'; ch >= 'c'; ch--)
    {
        str.SetAt(
0,ch);
        UINT type
= GetDriveType(str);
       
if(DRIVE_REMOVABLE == type)
        {
            AfxMessageBox(str);
        }
    }
23.edit控件追加字符的问题

CString   strEdit;  
   
   
  m_edit1.GetWindowText(strEdit);  
   
  m_edit1.SetSel(strEdit.GetLength(),   strEdit.GetLength());  
   
  strEdit  
+=   "1235";  
   
  m_edit1.ReplaceSel(strEdit);

24.ToolTip如何显示多行

 m_ToolTips.SetMaxTipWidth(5000);
 m_ToolTips.AddTool(GetDlgItem(IDC_BUTTON_DOWNLOAD),

25.显示桌面属性对话框

/*@Desktop @Theme @ScreenSaver @Appearance @Settings*/
 ShellExecute(GetDesktopWindow()->m_hWnd,
    "open","control.exe","desk.cpl Display,@Theme","",SW_SHOW );

26.Delphi可拖动的控件

在控件的MouseDown添加如下代码:
  ReleaseCapture;  
  (Sender   as   TGroupBox).Perform(WM_SysCommand,   $f012,   0);  

27.VC中嵌入编译manifest文件

1.在.rc文件中用文本编辑器打开比如(notepad):然后手动添加如下内容:
#define RT_MANIFEST 24
//////////////////////////////////////////////////////////////////////////
//
// RT_MANIFEST
//
1                       RT_MANIFEST             "res/manifest.xml"
 
2.把manifest.xml文件放在res/目录下.最后重新编译后.就把清单文件信息编译进你的工程了.

Vista风格+请求管理员权限的xml文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity 
version="7.0.0.247" 
processorArchitecture="X86" 
name="XP Style" 
type="win32" 
/> 
<dependency> 
<dependentAssembly> 
<assemblyIdentity 
type="win32" 
name="Microsoft.Windows.Common-Controls" 
version="6.0.0.0" 
processorArchitecture="X86" 
publicKeyToken="6595b64144ccf1df" 
language="*" 
/> 
</dependentAssembly> 
</dependency>
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
     <security>
       <requestedPrivileges>
         <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
       </requestedPrivileges>
     </security>
   </trustInfo>
</assembly>

原创粉丝点击