Windows API 九九乘法表 [未完 待续]

今天回头把Windows API 的第三、第四章看了一遍,想写一个九九乘法表的窗口程序,我想实现的窗口是这样的:第一行是1*1=1;第二行是1*2=2;以此类推 。问题是不知道怎么让“1*1=”(也就是下面代码中的i*j)显示到屏幕上。

 

了解程度 :目前为止还只是找到了可以添加逻辑代码的地方,用的还很不到位,有些语句比如wprintf函数、TextOut函数的一些用法还不是太了解,于是只能实现九九乘法表的结果输出到显示屏上,在网上也找了很多说明,但是没能解决我的问题 。 先把代码分享一下吧,不管怎么样,我的第一个用Windows API做出来的东西已经上市了 ,哈哈 ……这个问题在以后的学习中在解决吧 ……

Windows API代码如下 :

/*
HELLOWIN.C -- Displays(显示) * 九九乘法表 * in client(客户端) area
在客户端区域上 显示九九乘法表
*/
 

# include<windows.h>

//#pragma comment(lib, "WINMM.LIB")
LRESULT CALLBACK WndProc (HWND ,UINT,WPARAM,LPARAM) ; //UINT 表示unsigned int. 这句是窗口过程的声明

int WINAPI WinMain (HINSTANCE hInstance ,HINSTANCE hPrevInstance ,PSTR szCmdLine , int iCmdShow) //PSTR 是指向非宽字符串的指针
{

	static TCHAR szAppname [] = TEXT ("HELLOWIN");
	HWND  hwnd ;
	MSG   msg;//消息结构
	WNDCLASS   wndclass ;//窗口类结构

	wndclass.style    =  CS_HREDRAW  | CS_VREDRAW ;
	wndclass.lpfnWndProc  = WndProc ;//这是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 ("这是啥"),szAppname ,MB_ICONERROR) ;

	    return 0;
	}

	hwnd = CreateWindow (szAppname  ,           //hwnd 是句柄 ,szappname是窗口类名称
		                 TEXT ("九九乘法表"), //窗口标题
						 WS_OVERLAPPEDWINDOW,   //窗口风格(窗口格式)
						 CW_USEDEFAULT,  //初始x坐标
						 CW_USEDEFAULT,  //初始y坐标
						 CW_USEDEFAULT,  //初始x方向尺寸
						 CW_USEDEFAULT,  //初始y方向尺寸
						 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, LPARAM lParam)
{
     HDC         hdc ;
     PAINTSTRUCT ps ;  //绘制结构
     RECT        rect ;//矩形结构

	 static int cxChar, cxCaps, cyChar ;
     int iLength;
    TCHAR szBuffer [50] ;
	TEXTMETRIC tm ;

	int i ,j,a[10][10];

	for (j=1;j<10;j++)
	{
		for (i=1;i<=j;i++)
		{
			a[i][j]=i*j;
		}
	}

     switch (message)
     {
     case WM_CREATE:                                                    
          hdc = GetDC (hwnd) ;
        GetTextMetrics (hdc, &tm) ;
        cxChar = tm.tmAveCharWidth ;
        cyChar = tm.tmHeight + tm.tmExternalLeading ;
        cxCaps=(tm.tmPitchAndFamily&1?3:2)*cxChar/2;
        ReleaseDC (hwnd, hdc) ;
		return 0;
          
     case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ;
          
           for (j=1;j<10;j++)
	{
		for (i=1;i<=j;i++)
		{
			iLength = wsprintf (szBuffer, TEXT ("%i"),a[i][j]);
                TextOut(hdc,cxCaps*4*i,cyChar*j*3,szBuffer,iLength);
		}
	}
          EndPaint (hwnd, &ps) ;
          return 0 ;
          
     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}


运行结果:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值