您的位置:首页 > 编程语言

自己动手写代码模仿MSN风格的弹窗

2011-04-29 10:06 543 查看
清明放假第一天,闲来无事,灵感突发,写下该程序。本程序为纯Win32 SDK实现,未使用MFC库,核心函数为MoveWindow。

认识到的问题:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: