新手学习windows编程之路

 

作为一个初学者,我这样认为。搞windows程序设计,自然C/C++是不二之选,windows的API函数都是C的形式。一种方法是使用纯C语言,利用winSDK开发,另一种是使用C++语言,利用MFC框架开发。前者就称作SDK编程,后者就称作MFC编程吧。SDK编程在做大的程序项目时会显得很繁琐,而MFC封装了winAPI,大大简化了开发过程,提高了效率。而且我们可以发现SDK编程中,做一个仅有一个窗口的hellow world程序也要长篇的代码。下面就是一个简单的WIN32程序代码:

#include <windows.h>
#pragma comment(lib,"winmm.lib") 

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

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{	
	//variable
	static TCHAR szAppName[] = TEXT("HelloWin32!");
	WNDCLASS wc;
	HWND hwnd;
	MSG msg;

	//SET WNDCLASS 
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hInstance = hInstance;
	wc.lpfnWndProc = WndProc;
	wc.lpszClassName = szAppName;
	wc.lpszMenuName = NULL;
	wc.style = CS_HREDRAW | CS_VREDRAW;

	//REGISTER WNDCLASS
	if(!RegisterClass(&wc))
	{
		MessageBox(NULL,TEXT("The program require NT system!"),szAppName,MB_ICONERROR);

		return 0;
	}

	//CREATE WINDOW
	hwnd = CreateWindow(szAppName,TEXT(" HELLO WIN32 "),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

	//SHOW WINDOW
	ShowWindow(hwnd,SW_SHOWNORMAL);
	//UPDATE WINDOW
	UpdateWindow(hwnd);

	//MSG CIRCLE
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);

	}
	return msg.wParam;	
}


//CALLBACK FUNCTION
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	//Handle to a device context (DC)
	HDC hdc;
	//PAINT STRUCT
	PAINTSTRUCT ps;
	//RECT STRUCT
	RECT rect;

	switch(message)
	{
		case WM_CREATE:
        
			PlaySound(TEXT("tx.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
        
			return 0 ;
        
	   case WM_PAINT:
        
            hdc = BeginPaint (hwnd, &ps);

            GetClientRect (hwnd, &rect);

	        DrawText (hdc, TEXT (" Hello, Win32 !"), -1, &rect,
        
			DT_SINGLELINE | DT_CENTER | DT_VCENTER);
        
            EndPaint (hwnd, &ps);
        
            return 0;
 
      case WM_DESTROY:
        
            PostQuitMessage (0);
        
            return 0;        
    }
        
  return DefWindowProc(hwnd, message, wParam, lParam);
        
}

可以发现,我们要手动填写窗口的属性并注册窗口并手动启动消息循环。

如果每写一个小程序我们都要一开始就写这么多,显得很麻烦。

于是很多人在C++基本入门后就直接进军MFC了。

当他们在用MFC时会发现,他们只知道要这么用,而不知道为什么这么用,不知道他是怎么实现的。

作为正在学习windows编程的新手,我们应该在学习完C++基本的东西后,着手学习SDK编程,了解一些常用winAPI的用法。等对win32程序的运行机制等等有了一个比较深刻的理解后,再接触MFC。

到时候MFC也非常容易上手,何况我们在日后的编程中,经常在MFC项目开发的代码中直接用winAPI。

CSDN上最近比较火的博客博主段伏沥也是这么认为的,所以他一直坚持用SDK编程而不用MFC。

我认为如果SDK和MFC都深入了解了的话,自然会知道,该用什么的地方就用什么。

 

有两本书我非常推荐,一本是《windows程序设计》第五版,一本是《MFC windows程序设计》第二版。

虽然这两本书都是1999年就出的了,那时候用的是WIN98的系统,XP都还没面世。有人会觉得有点过时了,但其实这两本是windows程序设计的圣经,经典中的经典。里面的技术一点都不过时。

还有一本《深入浅出MFC》,也是经典中的经典,剖析了MFC的原理(这是很重要的,不能只会用而不知道原理),不过不适合初学者,应该在有一定基础后再看。虽然这本书也比较老,同样是1999年出版的,其中的编译器还在使用Viaual C++ 5.0,但经典的东西不会过时。

这三本书都是windows程序设计的圣经。我都已经收入了我的书架。

在网上一搜,不难发现,现在书名里还有MFC这个字眼的书,几乎绝迹了。很多新出版的书,大多打上Visual C++ 云云的各种称号,其实里面已经包含了MFC编程。薄薄的一本500多页的书,开头略讲C++语法基础,然后就讲MFC,然后就讲多线程,讲视频音频处理。初学者若是真的通过这薄薄的书,从不懂C++到熟练使用多线程,真是逆天了!

 

在学windows程序设计过程中,会遇到很多抽象概念,什么消息循环,消息队列等等,一开始可能难以理解,放一边,继续往下看,慢慢的再回过头来看,自然就慢慢的懂了。比如在汇编程序设计中,还有很多更抽象的概念呢,堆栈、寄存器、寻址方式等等更难以理解。很多人都是通过反复的看,慢慢的就理解了。编程的书,不是小说,看一遍就完事,往往是,我们如果要想学会里面的东西,至少是完完全全的看了好几遍了,有的章节的纸张甚至翻烂了。

学编程需要记忆,但不是死记硬背,而是在反复的开发实践、练习,反复的翻书过程中记住的。

 

奋斗吧骚年!

 

 

你可能感兴趣的:(新手学习windows编程之路)