首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

求一用汇编语音写的打地鼠程序(急),该如何处理

2012-02-10 
求一用汇编语音写的打地鼠程序(急)求一用汇编语音写的打地鼠程序,要求:在窗口中显示出9个区域,9的区域随机

求一用汇编语音写的打地鼠程序(急)
求一用汇编语音写的打地鼠程序,要求:在窗口中显示出9个区域,9的区域随机出现点,鼠标点中加一,点到其他区域减一。就是一个简单的类似于打地鼠的东西,如果有更好的思路的话也可以。
        有劳各位CSDN的帅哥靓妹们了   -   -

[解决办法]
这是WINDOWS程序设计这本书上的一个例子,应该会给你一些提示,

程序CHECKER1程序展示了一些简单的命中测试,此程序把显示区域分为5×5的25个矩形。如果您在某个矩形中按下鼠标按键,那么在该矩形中将出现一个「X」。如果您再按一次,那么「X」将被删除。

#include <windows.h>

#define DIVISIONS 5

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)

{ static TCHAR szAppName[] = TEXT ( "Checker1 ") ;

HWND hwnd ;

MSG msg ;

WNDCLASS wndclass ;



wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;



if (!RegisterClass (&wndclass))

{
MessageBox ( NULL, TEXT ( "Program requires Windows NT! "),
szAppName, MB_ICONERROR) ;

return 0 ;

}

hwnd = CreateWindow (szAppName, TEXT ( "Checker1 Mouse Hit-Test Demo "),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL) ;



ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;



while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

return msg.wParam ;

}


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAMlParam)

{

static BOOL fState[DIVISIONS][DIVISIONS] ;

static int cxBlock, cyBlock ;

HDC hdc ;

int x, y ;

PAINTSTRUCT ps ;

RECT rect ;



switch (message)

{

case WM_SIZE :

cxBlock = LOWORD (lParam) / DIVISIONS ;



cyBlock = HIWORD (lParam) / DIVISIONS ;

return 0 ;



case WM_LBUTTONDOWN :

x = LOWORD (lParam) / cxBlock ;

y = HIWORD (lParam) / cyBlock ;



if (x < DIVISIONS && y < DIVISIONS)

{

fState [x][y] ^= 1 ;

rect.left = x * cxBlock ;

rect.top = y * cyBlock ;

rect.right = (x + 1) * cxBlock ;

rect.bottom = (y + 1) * cyBlock ;



InvalidateRect (hwnd, &rect, FALSE) ;

}

else

MessageBeep (0) ;

return 0 ;



case WM_PAINT :

hdc = BeginPaint (hwnd, &ps) ;



for (x = 0 ; x < DIVISIONS ; x++)

for (y = 0 ; y < DIVISIONS ; y++)

{

Rectangle (hdc, x * cxBlock, y * cyBlock,

(x + 1) * cxBlock, (y + 1) * cyBlock) ;



if (fState [x][y])

{

MoveToEx (hdc, x * cxBlock, y * cyBlock, NULL) ;

LineTo(hdc, (x+1) * cxBlock, (y+1) * cyBlock) ;

MoveToEx (hdc, x * cxBlock, (y+1) * cyBlock, NULL) ;

LineTo (hdc, (x+1) * cxBlock, y * cyBlock) ;

}

}

EndPaint (hwnd,&ps);

return 0 ;



case WM_DESTROY :

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}

初学,不对之处请原谅
[解决办法]
你的程序的思路和上面WINDOWS程序设计书上的例子是一样的:

1:将窗口分成九块

2:产生随机数,表示出现在第几个区域

3:处理WM_LBUTTONDOWN消息判断MOUSE是否点击在出现的区域

或者

按候佩兄所说画九个按钮,然后响应事件,这个思路比上面的要好

初学不对请原谅

热点排行