需要WinAPI的替代品

时间:2013-03-18 08:34:02

标签: c++ windows winapi portability

由于我的recent question已关闭,因此对同一问题采用不同的方法。

我发现尝试学习winAPI很困难,并且大部分时间都不需要能够利用本机功能(感谢Spook),现在我需要一种不同的方法。

我更喜欢C ++并且对Qt有一点经验,但因为我想take advantage of platform specific features,Qt不是一个可行的解决方案。

我也关心可移植性,因此.NET可能不可行,除非有办法使用本地资源而不是.net框架安装程序中包含的资源。

所以请列举替代方案,我可以开始学习这些方法。

例如,如果我要制作使用this之类的空气透明度的东西,或者我需要我的程序能够操纵其他窗口,例如最小化/最大化它们除了winAPI之外我可以使用哪些工具?< / p>

1 个答案:

答案 0 :(得分:2)

我不确定我理解,因为即使您使用Qt(或任何其他x平台框架),也没有任何障碍阻碍您使用平台特定功能。您只需将不同编译单元中的特定功能分开,以用于您希望支持的不同平台。没有比这更多的了。

名义上你在头文件中定义一个接口/类,然后你可以在多个不同的body文件中实现该接口/类,每个文件都持有特定平台f.i的实现。 Win32 / Mac OS X / Linux。

标题(.h文件)中的

f.i:

class MyXPlatformClass {
public:
   static std::string getMachineName();
}

然后在cpp文件中实现这个“接口”:

的Win32:

std::string MyXPlatformClass::getMachineName() {
   char buffer[256]; 
   GetComputerNameA(buffer, sizeof(buffer));
   return buffer;
}

Mac OS X(和Linux?):

std::string MyXPlatformClass::getMachineName() {
   char buffer[256]; 
   gethostname(&buffer, sizeof(buffer));
   return buffer;
}

这就是跨平台编码的完成方式,它与您选择使用的框架无关。我推荐Qt,因为它相当“完整”,这意味着它几乎所有工具都不需要打扰特定于平台的代码。但是如果你需要它,你可以使用上面的方法。