自己动手写代码模仿MSN风格的弹窗
2011-04-29 10:06
543 查看
清明放假第一天,闲来无事,灵感突发,写下该程序。本程序为纯Win32 SDK实现,未使用MFC库,核心函数为MoveWindow。
认识到的问题:
1.每移动一次窗口就必须用ShowWindow显示窗口,我不知道这算不算窗口的即时重绘。
2.工作线程和主线程必须分开,不然窗口内容无法即时显示。
效果图:
还是那句老话:翠花,上代码~~~
认识到的问题:
1.每移动一次窗口就必须用ShowWindow显示窗口,我不知道这算不算窗口的即时重绘。
2.工作线程和主线程必须分开,不然窗口内容无法即时显示。
效果图:
还是那句老话:翠花,上代码~~~
/************************************************************************************ *FileName:ShowMsgDlg.cpp *Author:Swtar *Data:2011-04-02 ***********************************************************************************/ //包含头文件 #include <windows.h> #include "resource.h" //函数声明 BOOL CALLBACK DlgPro(HWND,UINT,WPARAM,LPARAM); BOOL ShowMsg(HWND); DWORD WINAPI Move(LPVOID); //入口函数 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { DialogBox(hInstance,MAKEINTRESOURCE(IDD_MSG),NULL,DlgPro); return 0; } //弹出窗口回调函数 BOOL CALLBACK DlgPro(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { DWORD dwThreadID=0; switch(message) { case WM_INITDIALOG: ShowMsg(hWnd); case WM_TIMER: //创建工作线程 CreateThread(NULL,0,Move,(LPVOID)hWnd,0,&dwThreadID); case WM_COMMAND: { switch(LOWORD(wParam)) { case IDCANCEL: EndDialog(hWnd,0); } } } return FALSE; } //弹出窗口初始化 ShowMsg(HWND hWnd) { int x,y; const int cx=480,cy=320; //获得当前系统分辨率 x=GetSystemMetrics(SM_CXSCREEN); y=GetSystemMetrics(SM_CYSCREEN); //初始化单出窗口位置,并将窗口置顶(TopMost) SetWindowPos(hWnd,HWND_TOPMOST,x,y,0,0,SWP_NOSIZE); //设置定时器 SetTimer(hWnd,1,5000,NULL); //让程序不在系统任务栏显示 LONG lStyle=GetWindowLong(hWnd,GWL_EXSTYLE); lStyle|=WS_EX_TOOLWINDOW; lStyle&=~WS_EX_APPWINDOW; SetWindowLong(hWnd,GWL_EXSTYLE,lStyle); return TRUE; } //工作线程回调函数 DWORD WINAPI Move(LPVOID lpParameter) { HWND hWnd=(HWND)lpParameter; KillTimer(hWnd,1); int x,y,iCyTaskBar,j; const int cx=480,cy=320; RECT rt; x=GetSystemMetrics(SM_CXSCREEN)-cx-10; y=GetSystemMetrics(SM_CYSCREEN); SystemParametersInfo(SPI_GETWORKAREA,0,&rt,0); iCyTaskBar=y-rt.bottom; j=cy+iCyTaskBar; //弹出 for(int i=0;i<=j;i++) { MoveWindow(hWnd,x,y--,cx,cy,TRUE); ShowWindow(hWnd,SW_SHOW); Sleep(5); } //停留10秒钟 Sleep(10000); //收回 for(i=0;i<=j;i++) { MoveWindow(hWnd,x,y++,cx,cy,TRUE); ShowWindow(hWnd,SW_SHOW); Sleep(5); } //发送消息关闭程序 SendMessage(hWnd,WM_CLOSE,0,0); return TRUE; } 以下是资源文件的相关代码: /************************************************************************************ *FileName:resource.h *Author:Swtar *Data:2011-04-02 ***********************************************************************************/ //{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by dialog.rc // #define IDD_MSG 101 #define IDB_BITMAP1 102 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 103 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif /************************************************************************************ *FileName:dialog.rc *Author:Swtar *Data:2011-04-02 ***********************************************************************************/ //Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Chinese (中国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) #ifdef _WIN32 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #pragma code_page(936) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h/0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""/r/n" "/0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "/r/n" "/0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_MSG DIALOG DISCARDABLE 0, 0, 241, 160 STYLE WS_POPUP FONT 10, "System" BEGIN CONTROL 102,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_REALSIZEIMAGE,0,0,241,160 END ///////////////////////////////////////////////////////////////////////////// // // Bitmap // IDB_BITMAP1 BITMAP DISCARDABLE "msg.bmp" #endif // Chinese (中国) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED
相关文章推荐
- [ay原创作品]用wpf写了个模仿36Kr网站登录背景的效果-【鄙视博客园,已被移出首页,代码在我自己官网上,自己下载学习吧】
- 自己动手开发编译器(九)CPS风格的解析器组合子
- 仿msn风格的选项卡_网页代码站(www.webdm.cn)
- 自己动手实现简易代码生成器、采用文本模板文件生成服务层、服务层接口代码的做法参考
- 自己动手写代码,突破google封锁。
- 自己动手,结合javascript和dhtml做一个ubb编辑器(附例子代码)
- 自己动手实现简易代码生成器、采用文本模板文件生成服务层、服务层接口代码的做法参考
- 自己动手定制NUnit(三):整合ncover生成代码覆盖率报表
- 反编译不完全的代码(自己动手写开发工具总结)
- [导入]自己动手实现 lucene 搜索代码高亮显示
- C# 模仿QQ、MSN消息提示系列 二、基本效果模仿包含代码
- 自己动手定制NUnit(三):整合ncover生成代码覆盖率报表(zhuan)
- JS模仿MSN右下角弹出提示框代码
- JS+CSS实现仿msn风格选项卡效果代码
- 自己动手实现简易代码生成器、采用文本模板文件生成服务层、服务层接口代码的做法参考
- 自己的代码风格——代码注释
- 自己动手写控件(模仿mvc htmlhelper的类)
- 自己动手做个MSN信息群发软件
- 复制本贴地址传给QQ/MSN好友的代码(自己写内容)