#include "stdafx.h"
int g_xs=100;
int g_ys=100;
int LEFTS=1;
int RIGHTS=0;
int TOPS=1;
int BOTTOMS=0;
HINSTANCE g_hInstance;
#define LEN 100void OnPaints(HWND hWnd)
{
HDC hDC=GetDC(NULL);
HPEN nPen=CreatePen(PS_DASH,6,RGB(192,168,026));
HGDIOBJ nOldPen = SelectObject(hDC,nPen);
HBRUSH nBrush2 = CreateHatchBrush(HS_HORIZONTAL,RGB(87,11,11));
HGDIOBJ nOldBrush2 = SelectObject(hDC, nBrush2);
Ellipse(hDC,g_xs,g_ys,g_xs+LEN,g_ys+LEN);
SelectObject(hDC,nOldBrush2);
DeleteObject(nBrush2);
SelectObject(hDC,nOldPen);
DeleteObject(nPen);
//SetBkMode( hDC, TRANSPARENT );
ReleaseDC(hWnd,hDC);
}void OnTimer(HWND hWnd)
{
//HWND hWndc=GetDesktopWindow(VOID);
RECT rect={0};
GetWindowRect( hWnd, &rect );
if(g_xs>=rect.right)
{
RIGHTS=1;
LEFTS=0;
}
if(g_xs<=rect.left)
{
RIGHTS=0;
LEFTS=1;
}
if(g_ys>=rect.bottom)
{
TOPS=0;
BOTTOMS=1;
}
if(g_ys<=rect.top)
{
TOPS=1;
BOTTOMS=0;
}
if(LEFTS) g_xs += 5;
if(RIGHTS) g_xs -= 5;
if(TOPS) g_ys += 5;
if(BOTTOMS) g_ys -= 5;
InvalidateRect(hWnd,NULL,TRUE);
}
void OnSetTimer(HWND hWnd)
{
SetTimer(hWnd,1,15,NULL);
}LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg,
WPARAM wParam, LPARAM lParam ){
switch( uMsg ){
case WM_CREATE:
OnSetTimer(hWnd);
break;
case WM_TIMER:
OnTimer(hWnd);
break;
case WM_PAINT:
OnPaints(hWnd);
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
}
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}BOOL Register( LPSTR pszClassName,WNDPROC pszWndProc)
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_GRAYTEXT+2);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInstance;
wce.lpfnWndProc = pszWndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName =NULL;
wce.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC;
ATOM nAtom = RegisterClassEx( &wce );
if( nAtom == 0 )
{
return FALSE;
}
return TRUE;
}HWND Create( LPSTR pszClassName, LPSTR pszWndName )
{
HWND hWnd = CreateWindowEx( 0, pszClassName, pszWndName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, g_hInstance, NULL );
return hWnd;
}void Display( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}void Message()
{
MSG nMsg = {0};
while( GetMessage( &nMsg, NULL, 0, 0 ) )
{
TranslateMessage( &nMsg );
DispatchMessage( &nMsg );
}
}int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
g_hInstance = hInstance;
BOOL nRet = Register("Main",(WNDPROC)WindowProc);
if(nRet==0)
{
MessageBox(NULL, "Register failed", "Infor", MB_OK);
return 0;
}
HWND hMain = Create("Main", "main window");
Display(hMain);
Message();
return 0;
}
解决方案 »
- vs2010 在不同操作系统下编译问题
- MFC小问题
- 求VC调用VB的DLL 的例子 多谢
- 控制台下是否有画点的函数?如果setpixel这种的,我想画个点,可以带颜色的,有的话包含文件是什么?
- SDI程序拆分窗口问题
- 我都觉得这个问题好简单,分少但好拿,快哦!
- 大家快来帮帮忙,THANK 谢谢了
- 最近我在做一个关于WINNT/2000登陆的程序,其实现的功能就和WINDOWS的登陆对话框一样,可以登陆到域。我看了一些MSDN中关于WINLOGON的资
- 请问怎样可以截获对某个远程端口的SOCKET连接?
- MFC程序员门大家都来钻研一下mmc+snapin编程吧??希望有人能捧场。。
- 用编程达到文件监控原理
- 动态链接库 无法启动dll
Ellipse(hDC,g_xs,g_ys,g_xs+LEN,g_ys+LEN);
#include "stdafx.h"
int g_xs=100;
int g_ys=100;
int LEFTS=1;
int RIGHTS=0;
int TOPS=1;
int BOTTOMS=0;
HINSTANCE g_hInstance;
#define LEN 100void OnPaints(HWND hWnd)
{
PAINTSTRUCT ps;
HDC hDC=BeginPaint(hWnd, &ps);
HPEN nPen=CreatePen(PS_DASH,6,RGB(192,168,026));
HGDIOBJ nOldPen = SelectObject(hDC,nPen);
HBRUSH nBrush2 = CreateHatchBrush(HS_HORIZONTAL,RGB(87,11,11));
HGDIOBJ nOldBrush2 = SelectObject(hDC, nBrush2);
Ellipse(hDC,g_xs,g_ys,g_xs+LEN,g_ys+LEN);
SelectObject(hDC,nOldBrush2);
DeleteObject(nBrush2);
SelectObject(hDC,nOldPen);
DeleteObject(nPen);
//SetBkMode( hDC, TRANSPARENT );
ReleaseDC(hWnd,hDC);
EndPaint(hWnd, &ps);
}void OnTimer(HWND hWnd)
{
//HWND hWndc=GetDesktopWindow(VOID);
RECT rect={0};
GetWindowRect( hWnd, &rect );
if(g_xs>=rect.right)
{
RIGHTS=1;
LEFTS=0;
}
if(g_xs<=rect.left)
{
RIGHTS=0;
LEFTS=1;
}
if(g_ys>=rect.bottom)
{
TOPS=0;
BOTTOMS=1;
}
if(g_ys<=rect.top)
{
TOPS=1;
BOTTOMS=0;
}
if(LEFTS) g_xs += 5;
if(RIGHTS) g_xs -= 5;
if(TOPS) g_ys += 5;
if(BOTTOMS) g_ys -= 5;
InvalidateRect(hWnd,NULL,TRUE);
}
void OnSetTimer(HWND hWnd)
{
SetTimer(hWnd,1,15,NULL);
}LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg,
WPARAM wParam, LPARAM lParam ){
switch( uMsg ){
case WM_CREATE:
OnSetTimer(hWnd);
break;
case WM_TIMER:
OnTimer(hWnd);
break;
case WM_PAINT:
OnPaints(hWnd);
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
}
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}BOOL Register( LPSTR pszClassName,WNDPROC pszWndProc)
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_GRAYTEXT+2);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInstance;
wce.lpfnWndProc = pszWndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName =NULL;
wce.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC;
ATOM nAtom = RegisterClassEx( &wce );
if( nAtom == 0 )
{
return FALSE;
}
return TRUE;
}HWND Create( LPSTR pszClassName, LPSTR pszWndName )
{
HWND hWnd = CreateWindowEx( 0, pszClassName, pszWndName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, g_hInstance, NULL );
return hWnd;
}void Display( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}void Message()
{
MSG nMsg = {0};
while( GetMessage( &nMsg, NULL, 0, 0 ) )
{
TranslateMessage( &nMsg );
DispatchMessage( &nMsg );
}
}int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
g_hInstance = hInstance;
BOOL nRet = Register("Main",(WNDPROC)WindowProc);
if(nRet==0)
{
MessageBox(NULL, "Register failed", "Infor", MB_OK);
return 0;
}
HWND hMain = Create("Main", "main window");
Display(hMain);
Message();
return 0;
}
太快了!
{
PAINTSTRUCT ps;
HDC hDC=BeginPaint(hWnd, &ps);// HDC hDC=GetDC(NULL);
HPEN nPen=CreatePen(PS_DASH,6,RGB(192,168,026));
HGDIOBJ nOldPen = SelectObject(hDC,nPen);
HBRUSH nBrush2 = CreateHatchBrush(HS_HORIZONTAL,RGB(87,11,11));
HGDIOBJ nOldBrush2 = SelectObject(hDC, nBrush2);
Ellipse(hDC,g_xs,g_ys,g_xs+LEN,g_ys+LEN);
SelectObject(hDC,nOldBrush2);
DeleteObject(nBrush2);
SelectObject(hDC,nOldPen);
DeleteObject(nPen);
//SetBkMode( hDC, TRANSPARENT );
ReleaseDC(hWnd,hDC);
EndPaint(hWnd, &ps);}
红的是你的和3楼的差别,你的其实没有绘出了!
{
//HWND hWndc=GetDesktopWindow(VOID);
RECT rect={0};
GetWindowRect( hWnd, &rect );
得到的不是客户区。
case WM_PAINT:
OnPaints(hWnd);
break;
只能绘制客户区,WM_NCPAINT才是非客户区。
不知道你把园画到外面干什么?
1》画Ball前把ball下的位图取出保存。
2》画ball。
3》恢复ball下的位图。
4》取新的ball下的位图。
1》他是一个在桌面上移动的窗口(a red ball),(不是移动的图)。
2》在桌面上移动,使用位图的办法难解决ball内闪烁的问题,因为有个ball内背景被恢复的问题。
3》本程序 用左键点击这个 ball 可以‘停止或移动’,点击右键退出程序。// DeskBall.cpp : Defines the entry point for the application.
//#include "stdafx.h"#define BALL_SIZE 60
#define MOVING_STEP 2
#define TIME 20int LEFTS=1;
int RIGHTS=0;
int TOPS=1;
int BOTTOMS=0;HINSTANCE g_hInstance;
int g_DeskWid;
int g_DeskHei;void SetupRegion(HWND hWnd)
{
RECT rc;
HRGN wndRgn, rgnTemp; HDC pDC = GetDC(hWnd);
GetWindowRect(hWnd,&rc); //
wndRgn=CreateRectRgn(0, 0, BALL_SIZE, BALL_SIZE);
rgnTemp=CreateEllipticRgn(0, 0, BALL_SIZE, BALL_SIZE);
CombineRgn(wndRgn, wndRgn, rgnTemp, RGN_AND);// minimun
//
SetWindowRgn(hWnd , wndRgn, TRUE);
DeleteObject(wndRgn);
DeleteObject(rgnTemp);
}//char Prompt[80];
void OnTimer(HWND hWnd)
{
RECT rc;
GetWindowRect(hWnd, &rc); if(rc.right >= g_DeskWid )
{
RIGHTS=1;// arrive at
LEFTS=0;
}
if(rc.left < 0)
{
// sprintf(Prompt,"X=%d;Y=%d\r\n",g_xs,g_ys);
// OutputDebugString(Prompt);
RIGHTS=0;
LEFTS=1;// arrive at
}
if(rc.bottom >= g_DeskHei)
{
TOPS=0;
BOTTOMS=1;// arrive at
}
if(rc.top <0 )
{
TOPS=1;// arrive at
BOTTOMS=0;
}
//
if(LEFTS)
{
rc.left += MOVING_STEP; rc.right += MOVING_STEP;
}
if(RIGHTS)
{
rc.left -= MOVING_STEP; rc.right -= MOVING_STEP;
}
if(TOPS)
{
rc.top += MOVING_STEP; rc.bottom += MOVING_STEP;
}
if(BOTTOMS)
{
rc.top -= MOVING_STEP; rc.bottom -= MOVING_STEP;
}
MoveWindow(hWnd,rc.left,rc.top, rc.right-rc.left, rc.bottom-rc.top,TRUE);
}void OnSetTimer(HWND hWnd)
{
SetTimer(hWnd,1,TIME,NULL);
}
//
LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_CREATE:
{
g_DeskWid=GetSystemMetrics(SM_CXSCREEN);
g_DeskHei=GetSystemMetrics(SM_CYSCREEN);
//
SetupRegion(hWnd);
//
OnSetTimer(hWnd);
break;
}
case WM_ERASEBKGND:
{// draw the ball
HDC hdc = (HDC) wParam;
HRGN rgnTemp=CreateRectRgn(0,0,0,0);
GetWindowRgn(hWnd,rgnTemp);
HBRUSH br=0;
br=CreateSolidBrush(RGB(255,0,0));
::FillRgn(hdc,rgnTemp,br);
DeleteObject(rgnTemp);
DeleteObject(br);
ReleaseDC(hWnd,hdc);
}
return 0;
case WM_TIMER:
OnTimer(hWnd);
return 0;
case WM_LBUTTONDOWN:
{// stop or start moving
static BOOL sw=FALSE;
sw = ~sw;
if(sw) KillTimer(hWnd,1);
else SetTimer(hWnd,1,30,0);
}
return 0;
case WM_RBUTTONDOWN:// exit
KillTimer(hWnd,1);
// full through
case WM_DESTROY:
PostQuitMessage( 0 );
break;
}
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
//
BOOL Register( LPSTR pszClassName,WNDPROC pszWndProc)
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_GRAYTEXT+2);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInstance;
wce.lpfnWndProc = pszWndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName =NULL;
wce.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
ATOM nAtom = RegisterClassEx( &wce );
//
return TRUE;
}//
HWND Create( LPSTR pszClassName, LPSTR pszWndName )
{
HWND hWnd = CreateWindowEx( 0, pszClassName, pszWndName,
WS_VISIBLE | WS_POPUP,
0, 0, BALL_SIZE, BALL_SIZE,
NULL, NULL, g_hInstance, NULL );
return hWnd;
}void Display( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}void Message()
{
MSG nMsg = {0};
while( GetMessage( &nMsg, NULL, 0, 0 ) )
{
TranslateMessage( &nMsg );
DispatchMessage( &nMsg );
}
}
//
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
g_hInstance = hInstance;
//
BOOL nRet = Register("Main",(WNDPROC)WindowProc);
if(nRet==0)
{
MessageBox(NULL, "Register failed", "Infor", MB_OK);
return 0;
}
HWND hMain = Create("Main", "main window");
//
Display(hMain);
//
Message();
//
return 0;
}
#include <windows.h>//
int g_xs=0;
int g_ys=0;
int LEFTS=1;
int RIGHTS=0;
int TOPS=1;
int BOTTOMS=0;
HINSTANCE g_hInstance;
HPEN g_nPen=0;
HBRUSH g_nBrush2=0;#define PEN 4
#define LEN (60-PEN)void OnPaints(HWND hWnd)
{
PAINTSTRUCT ps;
HDC hDC=BeginPaint(hWnd, &ps);
HGDIOBJ nOldPen = SelectObject(hDC,g_nPen);
HGDIOBJ nOldBrush2 = SelectObject(hDC, g_nBrush2);
Ellipse(hDC,g_xs+PEN/2,g_ys+PEN/2,g_xs+LEN,g_ys+LEN);
SelectObject(hDC,nOldBrush2);
SelectObject(hDC,nOldPen);
//SetBkMode( hDC, TRANSPARENT );
ReleaseDC(hWnd,hDC);
EndPaint(hWnd, &ps);
}char Prompt[80];
void OnTimer(HWND hWnd)
{
RECT rect;
GetClientRect(hWnd, &rect);
if((g_xs+LEN+PEN/2) >= rect.right)
{
RIGHTS=1;// arrive at
LEFTS=0;
}
if((g_xs) <= PEN/2)//rect.left)
{
// sprintf(Prompt,"X=%d;Y=%d\r\n",g_xs,g_ys);
// OutputDebugString(Prompt);
RIGHTS=0;
LEFTS=1;// arrive at
}
if((g_ys+LEN+PEN/2) >= rect.bottom)
{
TOPS=0;
BOTTOMS=1;// arrive at
}
if((g_ys) <= PEN/2)//rect.top)
{
TOPS=1;// arrive at
BOTTOMS=0;
}
//
if(LEFTS) g_xs += 5;
if(RIGHTS) g_xs -= 5;
if(TOPS) g_ys += 5;
if(BOTTOMS) g_ys -= 5;
InvalidateRect(hWnd,0,TRUE);
}void OnSetTimer(HWND hWnd)
{
SetTimer(hWnd,1,50,NULL);
}LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_CREATE:
{
g_nPen = CreatePen(PS_DASH,PEN,RGB(192,168,026));
g_nBrush2 = CreateHatchBrush(HS_HORIZONTAL,RGB(87,11,11));
//
OnSetTimer(hWnd);
break;
}
case WM_ERASEBKGND:
{
HDC hdc = (HDC) wParam;
// new ball does not need erase back ground !
RECT rect;
GetClientRect(hWnd,&rect);
HRGN rgnTemp;
rgnTemp=::CreateRectRgn(0,0,rect.right-rect.left,rect.bottom-rect.top);
//new ball
HRGN wndRgn;
wndRgn=::CreateEllipticRgn(g_xs,g_ys,g_xs+LEN,g_ys+LEN);
//
CombineRgn(rgnTemp, rgnTemp, wndRgn, RGN_XOR);//RGN_DIFF);
FillRgn(hdc,rgnTemp,(HBRUSH)GetStockObject(BLACK_BRUSH));
// free
DeleteObject(rgnTemp);
DeleteObject(wndRgn);
}
return 0;
case WM_TIMER:
OnTimer(hWnd);
break;
case WM_PAINT:
OnPaints(hWnd);
break;
case WM_DESTROY:
DeleteObject(g_nPen);
DeleteObject(g_nBrush2);
PostQuitMessage( 0 );
break;
}
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}BOOL Register( LPSTR pszClassName,WNDPROC pszWndProc)
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_GRAYTEXT+2);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInstance;
wce.lpfnWndProc = pszWndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName =NULL;
wce.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC;
ATOM nAtom = RegisterClassEx( &wce );
if( nAtom == 0 )
{
return FALSE;
}
return TRUE;
}HWND Create( LPSTR pszClassName, LPSTR pszWndName )
{
HWND hWnd = CreateWindowEx( 0, pszClassName, pszWndName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, g_hInstance, NULL );
return hWnd;
}void Display( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}void Message()
{
MSG nMsg = {0};
while( GetMessage( &nMsg, NULL, 0, 0 ) )
{
TranslateMessage( &nMsg );
DispatchMessage( &nMsg );
}
}int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
g_hInstance = hInstance;
BOOL nRet = Register("Main",(WNDPROC)WindowProc);
if(nRet==0)
{
MessageBox(NULL, "Register failed", "Infor", MB_OK);
return 0;
}
HWND hMain = Create("Main", "main window");
Display(hMain);
Message();
return 0;
}
重点是如何消除ball内闪烁!
#pragma comment(lib,"Msimg32.lib")int g_xs=100;
int g_ys=100;
int LEFTS=1;
int RIGHTS=0;
int TOPS=1;
int BOTTOMS=0;
HINSTANCE g_hInstance;
int cxClient, cyClient, LEN;
HBITMAP hBitmap, hBitmapScr;
int gxs, gys, MOVE;
void OnSize(HWND hWnd)
{
cxClient = GetSystemMetrics (SM_CXSCREEN);
cyClient = GetSystemMetrics (SM_CYSCREEN);
LEN = min (cxClient / 8, cyClient / 8);
MOVE = LEN / 4; HDC hdc = GetDC(hWnd);
HDC hdcMem = CreateCompatibleDC (hdc);
hBitmap = CreateCompatibleBitmap (hdc, LEN , LEN);
HDC hdcMemScr = CreateCompatibleDC (hdc);
hBitmapScr = CreateCompatibleBitmap (hdc, LEN , LEN);
ReleaseDC(hWnd,hdc); SelectObject (hdcMem, hBitmap);
SelectObject (hdcMemScr, hBitmapScr);
Rectangle (hdcMem, -1, -1, LEN + 1, LEN + 1); HBRUSH nBrush2 = CreateHatchBrush(HS_DIAGCROSS,0L);
SelectObject(hdcMem, nBrush2);
SetBkColor (hdcMem, RGB (255,0,255));
Ellipse(hdcMem,0,0,LEN,LEN); DeleteObject(nBrush2);
DeleteDC (hdcMem);
DeleteDC (hdcMemScr);
}void OnTimer(HWND hWnd)
{
if (hBitmap)
{
HWND hWndc = GetDesktopWindow();
HDC hdc = GetDC (hWndc);
HDC hdcMem = CreateCompatibleDC (hdc);
HDC hdcMemScr = CreateCompatibleDC (hdc); SelectObject (hdcMem, hBitmap);
SelectObject (hdcMemScr, hBitmapScr); if (!(g_xs == 100 && g_ys == 100 )){
BitBlt (hdc, gxs,gys,
LEN, LEN,hdcMemScr, 0, 0, SRCCOPY);
}
BitBlt (hdcMemScr, 0, 0, LEN, LEN,
hdc, g_xs, g_ys, SRCCOPY); TransparentBlt (hdc, g_xs, g_ys, LEN, LEN,
hdcMem, 0, 0, LEN, LEN, RGB (255,255,255)); DeleteDC (hdcMem);
DeleteDC (hdcMemScr);
ReleaseDC (hWndc, hdc); RECT rect;
GetClientRect( hWndc, &rect );
if(g_xs>=rect.right-LEN)
{
RIGHTS=1;
LEFTS=0;
}
if(g_xs<=rect.left)
{
RIGHTS=0;
LEFTS=1;
}
if(g_ys>=rect.bottom-LEN)
{
TOPS=0;
BOTTOMS=1;
}
if(g_ys<=rect.top)
{
TOPS=1;
BOTTOMS=0;
}
gxs = g_xs;
gys = g_ys;
if(LEFTS) g_xs += MOVE;
if(RIGHTS) g_xs -= MOVE;
if(TOPS) g_ys += MOVE;
if(BOTTOMS) g_ys -= MOVE;
}
}
void OnSetTimer(HWND hWnd)
{
SetTimer(hWnd,1,50,NULL);
}LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg,
WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_CREATE:
OnSetTimer(hWnd);
break;
case WM_SIZE:
OnSize(hWnd);
break;
case WM_TIMER:
OnTimer(hWnd);
break;
case WM_DESTROY:
if (hBitmap)
DeleteObject (hBitmap);
if (hBitmapScr)
DeleteObject (hBitmapScr);
KillTimer (hWnd,1);
PostQuitMessage( 0 );
break;
}
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}BOOL Register( LPCWSTR pszClassName,WNDPROC pszWndProc)
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_GRAYTEXT);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInstance;
wce.lpfnWndProc = pszWndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName =NULL;
wce.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC;
ATOM nAtom = RegisterClassEx( &wce );
if( nAtom == 0 )
{
return FALSE;
}
return TRUE;
}HWND Create( LPCWSTR pszClassName, LPCWSTR pszWndName )
{
HWND hWnd = CreateWindowEx( 0, pszClassName, pszWndName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, g_hInstance, NULL );
return hWnd;
}void Display( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOWMINIMIZED);
UpdateWindow( hWnd );
}void Message()
{
MSG nMsg = {0};
while( GetMessage( &nMsg, NULL, 0, 0 ) )
{
TranslateMessage( &nMsg );
DispatchMessage( &nMsg );
}
}int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
g_hInstance = hInstance;
BOOL nRet = Register(TEXT("Main"),(WNDPROC)WindowProc);
if(nRet==0)
{
MessageBox(NULL, TEXT("Register failed"), TEXT("Infor"), MB_OK);
return 0;
}
HWND hMain = Create(TEXT("Main"), TEXT("main window"));
Display(hMain);
Message();
return 0;
}
按照LZ的算法做一些修改