周报_2012第11周(2012/03/11-2012/03/17)
項目:X保密項目
2012.03.12
// Win XP 需要判斷取消操作.??? By lishupeng@360.cn 2012/03/12 11:49.
??? if (FileOp.fAnyOperationsAborted)
??? {
??????? bRet = FALSE;
??? }
?
const int gcn_SEC_DELAY = 100;??? // 等待 HTTP Download 下載線程處理網(wǎng)絡(luò)數(shù)據(jù)。
??????????????????????????????? // By lishuepng@360.cn 2012/03/12 16:37
if (Report(STAT_*))
??????????? {
??????????????? ShowWindow(SW_HIDE);
??????????????? Delay(gcn_SEC_DELAY);
??????????????? PostMessage(WM_CLOSE);
??????????????? //TerminateProcess(GetCurrentProcess(),0);
??????????????? //PostQuitMessage(-1);
??????????????? //TerminateProcess(GetCurrentProcess(),0);
??????????? }
?
2012.03.13
\BackUp\import.fg 配置文件 –> \AppData\Roaming\360Desktop
?
2012.03.14
// DRAWENTIRE時窗口句柄為空。 RedrawWindow時窗口句柄有效。
??????????? //m_wndMenu = ::WindowFromDC(lpDIS->hDC);
??????????? //::GetWindowRect(m_wndMenu, &rectTmp);
?
if (ODA_SELECT == lpDIS->itemAction)
{
??? // 菜單高度超過屏幕高度時,菜單項位置會變化,每次選中時需要保存菜單項位置。
??? m_wndMenu = ::WindowFromDC(lpDIS->hDC);
???
??? // 獲取菜單的裁剪區(qū)域
??? ::GetClipBox(lpDIS->hDC, &rectTmp);
???
??? // 判斷菜單是否被裁剪,如果被裁剪則計算頂端偏移位置。(20像素為菜單頂端和底端箭頭按鈕的高度)
??? int nTopOffset = rectTmp.top ? 20 - rectTmp.top : 0;
???
??? ::GetWindowRect(m_wndMenu, &rectTmp);
??? // 系統(tǒng)內(nèi)置 V:3 像素邊框
??? rectTmp.top??? = rectTmp.top + lpDIS->rcItem.top + gcn_COLOR_MARGIN_TOP + 3 + nTopOffset;
??? rectTmp.bottom = rectTmp.top + bmpInfo.bmHeight;
??? // 系統(tǒng)內(nèi)置 H:4 像素邊框
??? rectTmp.left += 4;
??? m_vecIconRect.clear();
??? for (int i = 0; i < s_nColorMenuItemCnt; ++i)
??? {
??????? rectTmp.left = rectTmp.left + gcn_COLOR_MARGIN_H;???????????????
??????? rectTmp.right = rectTmp.left + bmpInfo.bmWidth;???????????????
??????? m_vecIconRect.push_back(rectTmp);
??? }
??? // 鼠標(biāo)進入熱區(qū)后截獲環(huán)境菜單的窗口過程。??? Added by Li Shupeng 2012\02\29 22:13.
??? if (s_pCurMenuProc == NULL)
??? {
??????? this->PostMessageW(UDM_CONTEXTMENU_HOOK, WPARAM(m_wndMenu), NULL);
??? }
}
?
LRESULT CFolderView::OnMeasureItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& b_ret)
{???
??? int nIDCtl = (UINT)wParam;
??? LPMEASUREITEMSTRUCT lpDrawItemStruct = (LPMEASUREITEMSTRUCT)lParam;
??? // Windows XP 下判斷控件類型: 菜單項 TEXT_BKCOLOR_COMMAND_IDBASE(區(qū)別 Notepad++ 的自繪菜單項)
??? if (ODT_MENU == lpDrawItemStruct->CtlType && TEXT_BKCOLOR_COMMAND_IDBASE == lpDrawItemStruct->itemID)
…
}
?
LRESULT CFolderView::OnDrawItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& b_ret)
{
??? int nCtrlID = (UINT)wParam;
??? LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT)lParam;???
??? // Windows XP 下判斷控件類型: 菜單項 TEXT_BKCOLOR_COMMAND_IDBASE(區(qū)別 Notepad++ 的自繪菜單項)
??? if (ODT_MENU == lpDIS->CtlType && TEXT_BKCOLOR_COMMAND_IDBASE == lpDIS->itemID)
}
?
2012.03.15
調(diào)查截圖操作異常:全屏的截圖進程啟動之后,再激活后臺進程窗口,截圖進程的窗口過程將不會再接收到鍵盤消息。
解決方案:創(chuàng)建線程監(jiān)控激活的進程窗口。
?
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
??? if(pMsg->message==WM_KEYDOWN)
??? {
??????? HWND hWndLiveWriter = ::FindWindowW(_T("WindowsForms10.Window.8.app.0.33c0d9d"), NULL);
??????? switch ((int)pMsg->wParam)
??????? {
??????? case VK_ESCAPE:
??????????? Report(STAT_ESC);
??????????? ShowWindow(SW_HIDE);
??????????? Delay(gcn_SEC_DELAY);
??????????? PostMessage(WM_CLOSE);
??????????? return TRUE;
??????? case VK_SHIFT:???????????????
??????????? if (hWndLiveWriter)
??????????? {
??????????????? ::ShowWindow(hWndLiveWriter, SW_SHOW);
??????????? }
??????????? break;
??????? case VK_CONTROL:???????????????
??????????? if (hWndLiveWriter)
??????????? {
??????????????? ::SetForegroundWindow(m_hWnd);
??????????? }
??????????? break;
??????? }
??? }
??? if( CFrameWindowImpl<CMainFram>::PreTranslateMessage(pMsg) )
??? {
??????? return TRUE;
??? }
??? else
??? {
??????? return FALSE;
??? }
}
?
DWORD dwThreadId = 0;
g_hThreadActive = CreateThread(
??? NULL,?????????????????? // default security attributes
??? 0,????????????????????? // use default stack size?
??? MonitorActiveThread,??? // thread function name
??? wndMain.m_hWnd,???????? // argument to thread function
??? CREATE_SUSPENDED,?????? // use default creation flags
??? &dwThreadId);??????????? // returns the thread identifier
if (g_hThreadActive)
{
??? ResumeThread(g_hThreadActive);
}
?
if (g_hThreadActive)
{
??? TerminateThread(g_hThreadActive, 0);
??? CloseHandle(g_hThreadActive);
??? g_hThreadActive = NULL;
}
?
DWORD WINAPI MonitorActiveThread( LPVOID lpParam )
{
??? while (true)
??? {
??????? HWND hWndMainfrm = (HWND)lpParam;
??????? if (hWndMainfrm == NULL)
??????? {
??????????? break;
??????? }
??????? HWND hWndForeground = ::GetForegroundWindow();
??????? if (hWndForeground && (hWndMainfrm != hWndForeground))
??????? {
??????????? ::SetForegroundWindow(hWndMainfrm);
??????? }???????????????
??? }
??? return 0;
}
轉(zhuǎn)載于:https://www.cnblogs.com/DancingFish/archive/2012/03/12/2391554.html
總結(jié)
以上是生活随笔為你收集整理的周报_2012第11周(2012/03/11-2012/03/17)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .net 门槛高不高之我见
- 下一篇: win10网络共享计算机名,手把手教你w