Win32开发First of All:如何在Win32程序中使用XP风格(vista)的按钮?
来源:互联网 发布:软件结构图 工具 编辑:程序博客网 时间:2024/05/16 16:39
论坛上有朋友问,不说废话了,大过年的,时间比较宝贵:)
原贴:http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/98240e0a-7899-4184-96c9-2ac1bac221d3
建立一个Win32空项目,加入一个CPP文件main.cpp代码如下。
#include <windows.h>
#define CLASS_NAME TEXT("Vonger")
LRESULT _stdcall TestProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE:
{
::CreateWindow(TEXT("BUTTON"), TEXT("Hello"), WS_CHILD|WS_VISIBLE, 10, 10, 60, 30, hWnd, 0, 0, 0);
}
break;
case WM_LBUTTONDOWN:
::SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
break;
case WM_DESTROY:
::PostQuitMessage(1);
break;
}
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}
int _stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, BOOL)
{
WNDCLASS wc = {0};
wc.lpszClassName = CLASS_NAME;
wc.lpfnWndProc = TestProc;
wc.hbrBackground = (HBRUSH)::GetStockObject(BLACK_BRUSH);
wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
::RegisterClass(&wc);
HWND hWnd = ::CreateWindow(CLASS_NAME, CLASS_NAME, WS_POPUP|WS_VISIBLE,
100, 100, 100, 100, 0, 0, 0, 0);
if(hWnd == NULL)
return 1;
MSG msg = {0};
while(::GetMessage(&msg, 0, 0, 0))
::DispatchMessage(&msg);
return 0;
}
这是一个基本的Win32程序。就是在一个窗口上显示一个没有任何功能的按钮。
可以直接编译,发现该按钮是一个很反古的按钮~呵呵,没有新的基因(因为API的按钮都是默认画出来的,为了向下兼容,所以是这种反古画法)
现在,我来变魔术了~嘿嘿~
选择添加资源->Import...->把如下内容的一个文件给加进去->把这个资源段起名为RT_MANIFEST(随便起)->编译...见证奇迹:)
这个文件你想起什么名起什么名,一般是 项目名称.manifest
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
</dependentAssembly>
</dependency>
</assembly>
注意,这是VS2005的VC8.0的manifest可能和2008的VC9.0略有不同~
现在简单的讲解一下原理:这是XP以后Windows支持的新特性,由于界面变得好看了,所以需要一个文件来协调与Win98时代的代码兼容性,manifest由此而生。这个文件是XP以后的程序必备的,可以内嵌或者直接加到EXE的外面。具体可以参考MSDN中详细介绍manifest文件的部分,可以通过在msdn的英文界面中搜索manifest即可找到相关信息。
- Win32开发First of All:如何在Win32程序中使用XP风格(vista)的按钮?
- 在win32 api程序中:使用C++风格的字符串
- 让Win32界面程序有XP风格的简单办法
- win32 sdk使用xp风格控件
- 如何在Win32 Console Application (Win32控制台)程序中使用MFC
- vs开发的程序在xp下显示 xxx.exe不是有效的win32程序问题解决
- 如何在Smartphone的Win32程序中使用Windows的通用菜单资源(MENU而不是SHMENUBAR)
- win32程序中如何使用GDIPlus
- 在Win32控制台程序中使用定时器
- 如何在win32 Application 中使用MFC
- 如何在win32工程中使用控制台
- 如何解决在Win7,VS2012环境中生成的c++程序在XP上提示“XXXX.exe不是有效的Win32应用程序”的问题
- win32 程序中定时器的使用
- 如何在Win32 Console Application生成的窗口中添加按钮
- vs2015+Qt5.7编译生成的程序在xp中运行提示不是有效的win32程序解决方案
- win32中如何使用CString
- win32中如何使用CString
- win32中如何使用CString
- tomcat服务器和Apache的理解
- GNU ARM命令行工具基本使用入门
- 8259A芯片中断号与linux 系统中断号的对应关系
- CGAL环境设置(转载)
- 在Cisco的命令提示符(CLI)下輸入問號的方法
- Win32开发First of All:如何在Win32程序中使用XP风格(vista)的按钮?
- cygwin 使用make menuconfig 配置linux问题及解决方法
- Fedora下配置Telnet
- Fedora 8下FTP的配置
- Linux虚拟机和主机共享文件夹的配置
- 2010-02-18
- JDBC数据库学习中遇到的problems(一)
- where dream starts
- 论坛可用分兑换资源分