15,980
社区成员




BOOL bRetCode = SystemParametersInfo(SPI_GETMENUFADE, 0, (LPVOID)&bSystemMenuFade, 0);
bRetCode = SystemParametersInfo(SPI_GETMENUANIMATION, 0, (LPVOID)&bSystemMenuAnimation, 0);
BOOL bSetFade = TRUE, bSetAnimation = TRUE;
bRetCode = SystemParametersInfo(SPI_SETMENUFADE, 0, (LPVOID)bSetFade, SPIF_UPDATEINIFILE);
bRetCode = SystemParametersInfo(SPI_SETMENUANIMATION, 0, (LPVOID)bSetAnimation, SPIF_UPDATEINIFILE);
int id = ::TrackPopupMenu(hPopMenu,TPM_VERNEGANIMATION|TPM_LEFTALIGN|TPM_BOTTOMALIGN|TPM_RETURNCMD,rc.left,rc.top,0,m_hWnd,NULL);
m_tMenu.RemoveMenu(hPopMenu);
bRetCode = SystemParametersInfo(SPI_SETMENUFADE, 0, (LPVOID)bSystemMenuFade, SPIF_UPDATEINIFILE);
bRetCode = SystemParametersInfo(SPI_SETMENUANIMATION, 0, (LPVOID)bSystemMenuAnimation, SPIF_UPDATEINIFILE);
m_hUser32= GetModuleHandle(_T("USER32.DLL"));
g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(m_hUser32, "SetLayeredWindowAttributes"); if (g_pSetLayeredWindowAttributes == NULL)
::PostQuitMessage(0); HWND hWnd = GetSafeHwnd(); LONG lWindowLong = GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED; ::SetWindowLong(hWnd, GWL_EXSTYLE, lWindowLong); //关键是下面这两句 g_pSetLayeredWindowAttributes(hWnd, 0, (BYTE)m_tm, 2); ::RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); 在OnTimer()中添加:
g_pSetLayeredWindowAttributes(this->m_hWnd, 0, (BYTE)m_tm, 2); ::RedrawWindow(m_hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);//参考上面的程序
注:m_hUser32、g_pSetLayeredWindowAttributes定义为类的成员变量 使用结束后记得调用FreeLibrary()释放对DLL的使用 本程序在DestroyWindow()中释放 if(m_hUser32!=NULL) ::FreeLibrary(m_hUser32);
你可以参考一下 ,本人以前实现过。