HWND g_hWnd; POINT LastPoint; bool IsDrawingLine=false; BOOL CDemoDlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), TRUE); // Set big icon ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); //设置窗口最顶 static CLoadMyLibrary inst(m_hWnd); //----------------------------------------------------------------------------- g_hWnd=m_hWnd; OnButton1(); return TRUE; } /**************************************************************************** 低级鼠标钩子 #define _WIN32_WINNT 0x0500 //必须在stdafx.h中添加这一句 ****************************************************************************/ HHOOK g_LowLevelMouseHook=NULL; //钩子句柄 LRESULT CALLBACK LowLevelMouseProc(int nCode,WPARAM wParam, LPARAM lParam) { if (nCode<0 ) return CallNextHookEx(g_LowLevelMouseHook,nCode,wParam,lParam); static POINT point; point=(POINT)((MSLLHOOKSTRUCT *)lParam)->pt; switch (wParam) { case WM_LBUTTONDOWN: { TCHAR ClassName[20]={0}; ::GetClassName(::WindowFromPoint(point),ClassName,sizeof(ClassName)/sizeof(TCHAR)); if (_tcscmp(ClassName,_T("Button"))==0) break; ::ScreenToClient(g_hWnd,&point); LastPoint=point; IsDrawingLine=true; return 1; } break; case WM_LBUTTONUP: { IsDrawingLine=false; } break; case WM_MOUSEMOVE: { if (IsDrawingLine) { ::ScreenToClient(g_hWnd,&point); //画鼠标移动痕迹 HDC hdc=::GetDC(g_hWnd); //画曲线 HPEN pen=::CreatePen(PS_SOLID,4,RGB(30,30,30)); SelectObject (hdc,pen) ; ::MoveToEx(hdc,LastPoint.x,LastPoint.y,NULL); ::LineTo(hdc,point.x,point.y); LastPoint=point; DeleteObject(pen); ::ReleaseDC(NULL,hdc) ; } } break; } return CallNextHookEx(g_LowLevelMouseHook,nCode,wParam,lParam); //传递钩子信息 } #define WS_EX_LAYERED 0x00080000 void CDemoDlg::OnButton1() { HINSTANCE hInst=GetModuleHandle(_T("USER32.DLL")); if (hInst) { //获取模块里的函数 BOOL (WINAPI *SetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD)= (BOOL (WINAPI*) (HWND,COLORREF,BYTE,DWORD))GetProcAddress(hInst,"SetLayeredWindowAttributes"); //函数指针正确获取 if(SetLayeredWindowAttributes) { //让窗口具透明的特性 ::SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED); //设置窗口透明。第4参数为1时,第二个参数是要透明的颜色 SetLayeredWindowAttributes(m_hWnd,RGB(244,243,238),0,1); } FreeLibrary(hInst); //释放调模块句柄 } } void CDemoDlg::OnButton5() { HINSTANCE hInst=GetModuleHandle(_T("USER32.DLL")); if (hInst) { //获取模块里的函数 BOOL (WINAPI *SetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD)= (BOOL (WINAPI*) (HWND,COLORREF,BYTE,DWORD))GetProcAddress(hInst,"SetLayeredWindowAttributes"); //函数指针正确获取 if(SetLayeredWindowAttributes) { //让窗口具透明的特性 ::SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED); //设置窗口透明。第4参数为2时,第三个参数表示透明度 SetLayeredWindowAttributes(m_hWnd, 0, 80, 2); } FreeLibrary(hInst); //释放调模块句柄 } } void CDemoDlg::OnButton2() { //取消透明 ::SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE)& ~WS_EX_LAYERED); } void CDemoDlg::OnButton3() { //取消所有边框 ::SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) & ~WS_CAPTION & ~WS_THICKFRAME ); ::SetWindowPos(m_hWnd,NULL,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED); // //如果有WS_EX_DLGMODALFRAME还要取消WS_EX_DLGMODALFRAME // ::SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(m_hWnd,GWL_EXSTYLE) // & ~WS_EX_DLGMODALFRAME); // ::SetWindowPos(m_hWnd,NULL,0,0,0,0,SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOSIZE); int cx=GetSystemMetrics(SM_CXSCREEN); int cy=GetSystemMetrics(SM_CYSCREEN); ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,cx,cy,NULL); } void CDemoDlg::OnButton4() { //添加标题栏 ::SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) | WS_CAPTION ); ::SetWindowPos(m_hWnd,HWND_TOPMOST,100,100,400,400,SWP_FRAMECHANGED); } void CDemoDlg::OnButton6() { if(g_LowLevelMouseHook!=NULL) return; //start Low Level mouse hook g_LowLevelMouseHook=SetWindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc,GetModuleHandle(NULL),0); if(!g_LowLevelMouseHook) ::MessageBox(m_hWnd,TEXT("SetWindowsHookEx LowLevelMouseProc failed"),NULL,MB_OK); } void CDemoDlg::OnButton8() { //stop Low Level mouse hook UnhookWindowsHookEx(g_LowLevelMouseHook); g_LowLevelMouseHook=NULL; } void CDemoDlg::OnButton7() { ::InvalidateRect(m_hWnd,NULL,true); } |