[置顶] vs2010 玩转金山界面库 (1)贮备篇 2011-11-21 16:07 248人阅读 (0)
1:下载金山卫士的源码 :
https://bitbucket.org/knoss/pcmanager (本次所有的源码这里下载:
http://download.csdn.net/detail/qq283868910/3824713)
剥离出 如下 结构:
bkres目录结构
bkwin目录结构
tingxml 结构
wtl是wtl的头文件 需要安装 如果没有请到微软下载安装 地址:
wtl下载 http://wtl.sourceforge.net/安装方法:
下载后,在(trunk\)WTL\Wizards\AppWiz子目录中, 可以找到安装脚本。使用wscript.exe(默认路径C:\WINDOWS\system32\wscript.exe)运行setup100.js(Express版运行setup100x.js)。这样就安装好了! (这个只针对vs2010)
贮备工作基本完成
(ps:那些包含库可以这里下载:
点击打开链接)
开始项目:
新建解决方案(如图)
选择如图:
这个时候创建项目会失败是运行不了的,这个应该算bug,不管他,点确定就可以了,看后面 ;
1: 选择项目=====属性=====配置属性=====C/C++===常规=====附加包含目录======找到wtl的包含头文件(我们前面建立了wtl目录 里面就放的wtl头文件,你这里选这里)
见图:
这个时候运行会显示错误,找不到头文件由此见下:
错误 3 error C1083: 无法打开包括文件:“atlapp.h”: No such file or directory e:\visual studio\mvc\ks\ks\stdafx.h 15 1 ks
2:修改stdafx.h中包含头的路径 #include "atlres.h" 改为 wtl的include目录加atlres.h 我的是#include "inc/wtl/atlres.h" 然后运行 (如图)
好了这里所有贮备工作全做完了 后面就对 wtl 进行手术 金山界面库的应用
[置顶] vs2010 玩转金山界面库 (2) 应用基础2011-11-21 16:16 174人阅读
评论(0)
收藏 举报上一篇 介绍准备工作 下面讲 对wtl的修改 应用金山界面库
1:修改stdafx.h
修改为如下:
[cpp]
view plaincopy// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
// Change these values to use different versions
#define WINVER 0x0500
#define _WIN32_WINNT 0x0501
#define _WIN32_IE 0x0501
#define _RICHEDIT_VER 0x0200
#include <atlbase.h>
#include <wtl/atlapp.h>
extern CAppModule _Module;
#include <atlwin.h>
#include <wtl/atlframe.h>
#include <wtl/atlctrls.h>
#include <wtl/atldlgs.h>
#if defined _M_IX86
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
2:修改MainDlg.h
修改为如下:
[cpp]
view plaincopy// MainDlg.h : interface of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
class CMainDlg : public CBkDialogImpl<CMainDlg>
{
public:
CMainDlg() : CBkDialogImpl<CMainDlg>(IDR_BK_MAIN_DIALOG)
{
}
//////////////////////////////////////////////////////////////////////////
public:
///资源初始化 id 加方法
BK_NOTIFY_MAP(IDC_RICHVIEW_WIN)
BK_NOTIFY_ID_COMMAND(IDC_BTN_SYS_CLOSE, OnBkBtnClose)
BK_NOTIFY_ID_COMMAND(IDC_CHK_CHK1, OnCheck1)
BK_NOTIFY_ID_COMMAND(IDC_CHK_MYCHK, OnMyCheck)
BK_NOTIFY_ID_COMMAND(IDC_BTN_MENU, OnMainMenu)
BK_NOTIFY_ID_COMMAND(IDC_BTN_MAX, OnMaxWindow)
BK_NOTIFY_ID_COMMAND(IDC_BTN_MIN, OnMinWindow)
//BK_NOTIFY_ID_COMMAND(IDS_BTN_BTN1,OnAdd)
BK_NOTIFY_MAP_END()
BEGIN_MSG_MAP_EX(CMainDlg)
MSG_BK_NOTIFY(IDC_RICHVIEW_WIN)
MSG_WM_SYSCOMMAND(OnSysCommand)
CHAIN_MSG_MAP(CBkDialogImpl<CMainDlg>)
MSG_WM_INITDIALOG(OnInitDialog)
MSG_WM_TIMER(OnTimer)
REFLECT_NOTIFICATIONS_EX()
END_MSG_MAP()
//////////////////////////////////////////////////////////////////////////
//定义方法
public:
void btclick(){
OnMainMenu();
}
void OnBkBtnClose()
{
EndDialog(IDCANCEL);
}
void OnMainMenu()
{
::MessageBox(this->m_hWnd, _T("Main Menu!"), _T("Menu!"), MB_OK);
}
void OnCheck1()
{
//EndDialog(IDCANCEL);
/*::MessageBox(this->m_hWnd, _T("Hello!"), NULL, MB_OK);*/
return;
}
void OnMyCheck()
{
::MessageBox(this->m_hWnd, _T("My CheckBox!"), NULL, MB_OK);
}
LRESULT OnMaxWindow();
LRESULT OnMinWindow();
void OnSysCommand(UINT nID, CPoint point);
LRESULT OnInitDialog(HWND, LPARAM);
protected:
int m_nCurProgress;
};
3:修改MainDlg.cpp
修改为如下:
[cpp]
view plaincopy// MyApp.cpp : main source file for MyApp.exe
//
#include "stdafx.h"
#include "resource.h"
#include "MainDlg.h"
CAppModule _Module;
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpstrCmdLine*/, int /*nCmdShow*/)
{
HRESULT hRes = ::CoInitialize(NULL);
// If you are running on NT 4.0 or higher you can use the following call instead to
// make the EXE free threaded. This means that calls come in on a random RPC thread.
// HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
ATLASSERT(SUCCEEDED(hRes));
// this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used
::DefWindowProc(NULL, 0, 0, 0L);
AtlInitCommonControls(ICC_BAR_CLASSES); // add flags to support other controls
hRes = _Module.Init(NULL, hInstance);
ATLASSERT(SUCCEEDED(hRes));
BkString::Load(IDR_BK_STRING_DEF);
BkFontPool::SetDefaultFont(BkString::Get(IDS_APP_FONT), -12);
BkSkin::LoadSkins(IDR_BK_SKIN_DEF);
BkStyle::LoadStyles(IDR_BK_STYLE_DEF);
int nRet = 0;
// BLOCK: Run application
{
CMainDlg dlgMain;
nRet = dlgMain.DoModal();
}
_Module.Term();
::CoUninitialize();
return nRet;
}
4:新建两个文件 分别为 bkwinres.h 和bkwinres.rc2
5:在项目中添加一个新建筛选器 命名为import 在里面再新建两个 分别命名为 bkwin和xml
然后选中bkwin 鼠标右击属性 添加现有项导入 bkwin目录的头文件 和tingxml目录的头文件
6:修改xml的4个cpp文件 为不使用预编译头文件 如图:
7:添加附加连接器 (这个文件我将和所有的一起上传或者到微软下载wddk 7.0 有600多m的iso)我将其单独剪切出来;如果是wddk 其目录为 D:\WinDDK\7600.16385.1\lib\ATL\i386 我是D盘;
具体设置 项目属性----连接器-----附加库目录---编辑 如图
8:附加资源的包含目录 这个不说了 照着上面弄
9:拷贝资源文件到 Resource Files(这个没办法 只能到我的源码包里去拷贝)
10:项目属性添加现有项bkwinres.h ;bkwinres.rc2;为新建的两个bkwinres.h ;bkwinres.rc2添加代码
bkwinres.h代码如下:
[cpp]
view plaincopy#pragma once
///资源定义
#define IDC_BTN_SYS_CLOSE 100
#define IDC_BTN_MAX 101
#define IDC_BTN_MIN 102
#define IDC_BTN_MENU 110
#define IDC_CHK_CHK1 4
#define IDC_CHK_MYCHK 18
#define IDS_APP_FONT 1
//#define IDS_BTN_BTN1 133
//#define IDS_JDT_JDT1 811
//#define IDS_JDT_JDT11 812
//#define IDS_TXT_TXT1 301
bkwinres.rc2代码如下:
[cpp]
view plaincopy//////////////////////////////////////////////////////////////////////////////////////
// XML
DEFINE_XML(IDR_BK_SKIN_DEF, 100, "res\\def_skin.xml")
DEFINE_XML(IDR_BK_STYLE_DEF, 101, "res\\def_style.xml")
DEFINE_XML(IDR_BK_STRING_DEF, 102, "res\\def_string.xml")
DEFINE_XML(IDR_BK_MAIN_DIALOG, 103, "res\\dlg_main.xml")
//////////////////////////////////////////////////////////////////////////
// PNG
DEFINE_PNG(IDP_LITTLE_LOGO, 201, "res\\little_logo.png")
DEFINE_PNG(IDP_BIG_LOGO, 202, "res\\big_logo.png")
DEFINE_PNG(IDC_BTN_CLOSE, 100, "res\\dlg_btn_close.png")
DEFINE_PNG(IDC_BTN_MAX, 101, "res\\dlg_btn_max.png")
DEFINE_PNG(IDC_BTN_MIN, 102, "res\\dlg_btn_min.png")
DEFINE_PNG(IDC_BTN_NORMAL, 103, "res\\dlg_btn_normal.png")
DEFINE_PNG(IDC_BTN_MENU, 110, "res\\dlg_btn_menu.png")
//////////////////////////////////////////////////////////////////////////
// BITMAP
DEFINE_BMP(IDB_DLG_HEADER, 501, "res\\dlg_header.bmp")
DEFINE_BMP(IDB_DLG_BODY, 502, "res\\dlg_body.bmp")
DEFINE_BMP(IDS_JDT_JDT1, 811, "res\\progress_bar_bg.bmp")
DEFINE_BMP(IDS_JDT_JDT2, 812, "res\\progress_bar_bg.bmp")
到此手术完毕 运行看看
运行看看
我的饿是这个效果
你的了
下一步 我将介绍修改界面内容和控件的应用