
微软不支持用C来开发Win32的原因,简单来说有3点:
1、C并不是应用开发语言
2、微软有C++类库MFC
3、微软甚至也不支持普通用户C++
下面我们分条阐述。
你静下心来,认真细密地去观察,就能够发觉,Windows的系统开发接口,也就是API,它是由来采用C语言予以提供的。
为什么会这样?
不光是Windows,Linux有着相同作为,MacOS也是这般行径,因为都是如此做法。
几乎所有当下的操作系统,其首选是C语言。一方面,C语言对内存分配能够实施极为精细的控制,进而可以确保系统速度。另一方面,C语言与汇编指令相混合搭配,能直接对硬件进行操作。
单单以系统接口这一角度而言,C 所展现出来的接口于进行链接期间,绝对可以确保不会出现改变的情况,并且其展现良好的的兼容性是处于最佳状态的。
在Windows刚开始发布的那段时期,微软所采取的做法是,让人们运用C语言的那种方式去编写程序。
很快,人们发现了一个问题。
输出"Hello World"这个简单内容的GUI窗口类程序,所需的程序行数在50至80行之间,是这样的情况。
大概如下:
plaintext
#include
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
// 1. 注册窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = L"HelloClass";
RegisterClass(&wc);
// 2. 创建窗口
HWND hwnd = CreateWindow(
L"HelloClass", // 窗口类名
L"Hello World", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, // X位置
CW_USEDEFAULT, // Y位置
400, // 宽度
300, // 高度
NULL, // 父窗口
NULL, // 菜单
hInstance, // 实例句柄
NULL); // 附加参数
if (!hwnd) return -1;
// 3. 显示窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 4. 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
于上述程序之内,存在着数量众多的重复性代码,然而这是Windows所需要的,其中涵盖了:
1、注册窗口类
2、创建窗口
3、显示窗口
4、窗口消息处理
5、窗口退出函数(没错,这个也要写)
即便是这样讲,虽说Windows这款系统对于使用者而言极为便利,仅需轻点鼠标便可开展运用,属于那种"友好"的系统,然而Windows编程却并非是一件轻松的事,反而是要撰写数量众多的代码,才能够将Windows编程妥善完成。
在编程人员群体当中,尤其是在Windows早期的时候,众多Dos编程人员,恰是在这个特定阶段,选择了告别编程工作,原因在于当时编程实在是太过复杂了,而微软对于编程人员这种"断崖式"的告别行为,是完全缺乏准备的。
那段期间,Windows尽管在用户群体里热度极高,然而其开发工作却致使从事Windows开发的人员陷入极度困扰之中,开展工作异常艰难!
那怎么办呢?
微软所选路径乃是简化代码,要借当时最为流行的C++达成这一目标。
于是乎,微软推出了MFC,进而提供了大量的类库,以及VC这个堪称开发大杀器的工具,于是,原本简单的一个hello World,摇身一变,成为了这般模样:
plaintext
#include
class CMyFrame : public CFrameWnd
{
public:
CMyFrame()
{
Create(NULL, _T("Hello MFC"), WS_OVERLAPPEDWINDOW,
CRect(100, 100, 500, 400));
}
};
class CMyApp : public CWinApp
{
public:
BOOL InitInstance()
{
m_pMainWnd = new CMyFrame();
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}
};
CMyApp theApp;
那一刻,清爽之感增添了许多,并且,由于App与Framework这两个类的添入,代码变得极为清新,另外,VC IDE当中加入了App Wizzard以及Class Wizzard,还有Resource、Dialog这些具备可视化特性的"资源"工具,使得Windows编程的门槛快速降低,此次稳住了Windows开发的整体局势。
即便这样,然而C++并非是那种称得上"容易"的语言,对专业开发人员来讲依旧颇为艰难。
哪怕到现在,C++程序员也不是很多。
为求改变当下状况,微软借由收购这一方式,购进了一家供应"所见即所得"技术的公司,之后据此开发出了Visual Basic。
这种开发方式,就是提供一个界面:

当处于这个界面之中时,我们能够看到,在一侧存在着一些于Windows里较为常用的控件诸如按钮,也就是Button,还有ListBox,即列表,以及ComboBox这样的下拉框啊,用户能够借助鼠标,径直将它们拖动至处于中间位置的空白Windows之上,如此一来便能够创建形成界面了,要是想要对按钮,也就是Button的标题予以修改,仅仅只需要使用"属性"窗口便可以达成了!
用户进行双击按钮的操作,其目的在于去编写那样一个命名为"Button_Clik"的函数,乃是为其去撰写与之相对应的功能的哟。
这般的界面,着实特别地契合"直觉",一下子使得使用的难度降低了九成,致使一个平常的用户也能够迅速地学会Windows开发了。
于是,微软就作出了分级。
普通用户,用Visual Basic来编程。
拥有高级功能,像是编写用户控件就要运用原来的Visual C++,交由高级用户去达成,与此同时,存在一些系统级别的功能,是以ActiveX、COM组件的形式予以提供,这同样能够让高级用户来完成。
经过这种"高加上低"的搭配方式,Windows的开发格局就这样被确定了下来。
确实,在Java被研发出来以后,微软推出了C#,取代了VB所占的地位。
当下,Windows平台所进行的开发,似乎略带有几分"日薄西山"这样的意味了,更多的情形是借助Web技术,经由Electronic这种具备跨平台特性的技术加以编写。
想想过去那些Windows开发的岁月,让我想起了一首词。
它源自明代才华出众的杨慎所创作的《临江仙·滚滚长江东逝水》,其所述内容如下。
plaintext
滚滚长江东逝水,
浪花淘尽英雄。
是非成败转头空。
青山依旧在,
几度夕阳红。
白发渔樵江渚上,
惯看秋月春风。
一壶浊酒喜相逢。
古今多少事,
都付笑谈中。
IT的江水滚滚向前,那里面有多少人的青春岁月啊!
我是明月,
一个互联网IT人!