<!-- /* Font Definitions */ @font-face {font-family:"MS 明朝"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS Mincho"; mso-font-charset:128; mso-generic-font-family:roman; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:Century; panose-1:2 4 6 3 5 7 5 2 3 3; mso-font-alt:"Times New Roman"; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"/@MS 明朝"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-charset:128; mso-generic-font-family:roman; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:"/@SimSun"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0mm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:Century; mso-fareast-font-family:"MS 明朝"; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:99.25pt 30.0mm 30.0mm 30.0mm; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:18.0pt;} div.Section1 {page:Section1;} -->
1. 使用 ModifyStyleEx 改 变 了控件 风 格无效
答:修改之后,重 绘 一次,如果 还 不行的 话 ,再 试试 看 调 用 SetWindowPos(0,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_DRAWFRAME);
2. 动态设 置 编辑 框的 ES_PASSWORD 无效
答:修改之后,需要 调 用一次 SetPasswordChar('*');
3. 如何 获 取任 务栏 小 图标 ?
答: 有网友提出,能不能在程序界面上 显 示当前的托 盘图标 , 这样 更直 观 一些。 这 一点我也曾想到 过 ,也知道奥秘就在 TBBUTTON 这 个 结 构体的 dwData 域里 面,可惜 这 个域的 结 构在 MSDN 中没有描述。我也曾 试 着 发 送 TB_GETIMAGELIST 消息 获 取 image list 的句柄,然后用 CImageList::FromHandle 加 载 到 CImageList 中,但却都失 败 了。
在 csdn 网友的帮助下,我弄清了 dwData 的 结 构,其 实 dwData 有一个 这样 的机构,我 们 命名 为 TRAYDATA:
struct TRAYDATA
{
HWND hwnd;
UINT uID;
UINT uCallbackMessage;
DWORD Reserved[2];
HICON hIcon; // 托 盘图标 的句柄
};
要 获 取到 这 个 hIcon, 其 实 很 简单 :
// 分配虚 拟 内存
lngAddress = VirtualAllocEx(hProcess, NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE);
// 将 hProcess 进 程内,地址 为 lngAddress 中的内容 ( 大小 为 sizeof(TBBUTTON)) 获 取到 tb 中
ret = ::ReadProcessMemory(hProcess, LPVOID(long(lngAddress)), &tb, sizeof(TBBUTTON), 0);
// 将 hProcess 进 程内,地址 为 tb.dwData 中的内容 ( 大小 为 sizeof(TRAYDATA)) 获 取到 tray 中
ret = ::ReadProcessMemory(hProcess, LPVOID(tb.dwData), &tray, sizeof(TRAYDATA), 0);
然后就可以用 tray.hIcon 索引到 这 个 图标 句 柄了
// 释 放内存代 码 略
4.BeginWaitCursor 和 EndWaitCursor 无效
答: SetCapture();BeginWaitCursor();....EndWaitCursor();ReleaseCapture();
5. 打印源 码 中文件名和行号常用的宏名是什 么 ?
答:文件名: __FILE__ 行号: __LINE__
6. 如何具体判断一个字符串中哪个是英文字母
答:函数 isalpha
7. 在注册表中如何得到所有安装了的 应 用程序程序的信息
答: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall 下面的子鍵
8.64 位系 统 下运行 32 的程序,操作注册表遭遇重定向 问题
答: 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);
9. 怎 么 使用系 统 默 认浏览 器在新窗口打 开 网 页
答: ShellExecute 是我 们 常用的一个 API ,可以运行程序,打 开 网 页 。
ShellExecute(NULL, "open", "http://www.youkuaiyun.com", NULL,NULL,SW_SHOWMAXIMIZED);
这样 可以打 开 一个网 页 ,但不是在新 IE 中打 开 ,改成下面方式 时 就可以在一个新的 IE 中打 开 网 页 了
ShellExecute(NULL, "open", "IEXPLORE", "http://www.youkuaiyun.com",NULL,SW_SHOWMAXIMIZED);
10. 怎 么 清除串口的 输 入 缓 冲
答: PurgeComm(hCom,PURGE_TXABORT ¦ PURGE_RXABORT ¦ PURGE_TXCLEAR ¦ PURGE_RXCLEAR);
11. 显 示桌面属性 对话 框
答: ShellExecute(GetDesktopWindow()->m_hWnd,"open","control.exe","desk.cpl Display,@Theme","",SW_SHOW );
12. 限制 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);
}