这个是我的第一篇技术文章,旨在帮助刚刚学Windows API的童鞋能够早日从API的苦海中做出一些东西出来,由于本人也是初学者,一些的错误还是难免的,欢迎大家指正,我会用初学者更加易懂的方式讲解。本文的标题是模仿一位CSDN的前辈的,本人正是通过那位前辈的文章才入门Windows API的,所以现在我也写一篇来答谢。
注意:阅读本篇文章默认的是你已经对于Windows程序的最基础的内部基本原理已经清楚(建议观看孙鑫老师的视频教程第一课)。
好了,进入正题,对于用Windows API编程用的软件我个人觉得用VC系列应该是最适合的了,鉴于现在用VS2010的教程不多,我就用最新的VS2010来编程,同时也可以解决有些童鞋用不会VS2010的问题。
首先新建win32项目,操作如图:
名称可以自己随意填,Othello是黑白棋的又称“奥赛罗”的英文叫法。单击确定在弹出的窗口里面直接点击完成,这样一个项目就创建完毕了,眼前的代码如果你看了孙鑫老师的教程应该不陌生吧,只不过都是VS2010的新版代码,稍微有些函数的名字不同罢了。在代码里面找到下面一段代码:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 将实例句柄存储在全局变量中
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
改成下面的样子:
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX,
CW_USEDEFAULT, 0, 486,508, NULL, NULL, hInstance, NULL);
由于我们不要菜单栏,所以还要改一段代码:
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_OTHELLO);
改成:
wcex.lpszMenuName = NULL;
解释一下,增加的~WS_SIZEBOX和~WS_MAXIMIZEBOX表示禁止改变窗口大小和禁止最大化,这样可以解决棋盘重绘的问题,这个以后讨论。486和508是窗口大小,其实实际上除了窗口的边框外你操作的客户区也就是空白的地方是480*480的大小,这个要留意,创建窗口是按整个窗口来算大小的,而你操作的客户区需要排除外框的大小。
这样一个客户区是480*480的窗口就创建好了,按F5调试你就可以看到了,如图:截图还是有点误差。
窗口有了之后就开始要写代码了,作为一个程序猿最苦逼的事情来了,但是在这之前,我们需要把图片素材准备好。
棋盘图片:
黑子和白子图片(我嫌正规的不好看就PS了一个所谓的黑白子):
图片可以直接右键保存,但是记得保存成BMP格式的,后面要用的是BMP格式的图片。
下一篇讲讲解如何使用代码绘图,希望大家多支持。