導航:首頁 > 編程語言 > wtl編程

wtl編程

發布時間:2022-08-04 05:43:56

① 分享WINDOWS編程學習方法和書籍(最佳答案200分)

如果想踏踏實實的學習WINDOWS編程,那麼建議你從Windows API(SDK)編程開始學起,這樣你可以很透徹的學習windows編程的原理,例如消息傳遞機制等等。
學好了Windows SDK編程,可以再看看MFC編程就簡單多了。

SDK編程入門書籍可以看:
中文版:《Windows 程序設計(第5版)》
英文版:《Programming Windows (Fifth Edition) 》
【原出版社】 Microsoft Press
【作 者】(美)Charles Petzold
【譯 者】 北京博彥科技發展有限責任公司
【叢 書 名】 Microsoft 程序設計系列
【出 版 社】 北京大學出版社
【書 號】 730104187X

這本書的中英文電子版都可以在網上找到,你可以上網搜搜對它的評價!
http://www.china-pub.com/2382

更深入的學習可以看《windows核心編程》,MFC方面的可以看《深入淺出MFC》。

② wtl編程怎麼打開界面設計

你不能用MFC的編程方式,去找WTL的消息映射。因為WTL不被微軟官方支持,所以VS里不推薦用手動添加。直接找BEGIN_MSG_MAP下的就可以了。如下段代碼:

BEGIN_MSG_MAP(CLoginDlg)
MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog)
COMMAND_ID_HANDLER(IDOK,OnOK)
COMMAND_ID_HANDLER(IDC_LOGIN,OnOK)
REFLECT_NOTIFICATIONS()
END_MSG_MAP()

③ c++ 的 stl windows sdk mfc wtl 這幾個部分應該怎麼學習啊

1.打牢C++的語言基礎。
2.STL是C++的標准庫,基於模板技術,結合泛型設計思想,是一套學習C++本身的很好的庫,但需要很好的C++語言功底。在一般的C++書籍中,都會有STL的章節,不過一般只是講如何應用它。在學習數據結構的時候,結合STL來學習容器和演算法,再好不過,推薦書籍《STL源碼剖析》(侯捷),如果你覺得需要掌握更深層次的模版技術並加強對模版的正確認識和了解,請看《C++ Templates中文版》。
3.對於windows sdk,你可以看《windows 程序設計》(Charles Petzold),裡面的例子全是用C寫就的,有了C/C++的基礎,這些例子都很簡單。跟著書本循序漸進,你會獲益良多。接下來,你可以看《windows核心編程》(Jeffrey Richter),裡面有很多高級技術,例子也用C++寫成。讀完這兩本書,你對windows環境下的編程就有了清晰的了解。
4.對於MFC,有了第三部的積累,小菜一碟。前提是第三部分你要掌握的非常良好。如果你初讀《MFC深入淺出》(侯捷),你可能會覺得有所困難,不過不要泄氣,硬著頭皮也要學完前幾章,待到你把前幾章弄通後,哈,後面的就很容易學下去了,而且充滿樂趣(對我而言是如此的)!
5.WTL,一個非常棒的Frame。你學好了模板,再結合你對MFC的了解,學習WTL再簡單不過了。WTL最好的一個地方在於,它是基於模版和多重繼承實現的。由於模版的特性,WTL所有的源代碼都在頭文件中,這些源碼正是學習WTL的最好方法。到了這個階段,你會覺得,看WTL源代碼是一件頗為享受的事情,因為你得以一窺它是如何實現與MFC同名的一些函數的。自然,這里有一本書(其實不能算書,是Code Project上的一系列文章的集合),叫做《WTL for MFC programmer》,有中文版。
關於其它,對於windows的高級技術COM/COM+,已經不是現今的主流技術了,《COM本質論》的作者也說在.net大行其道的今天,COM已經沒落了,但現在windows的很多關鍵部分仍在應用COM,谷歌地球的自定義編程也是COM方面的內容。簡單來說,COM是基於二進制防火牆的跨平台的技術,內容繁雜,你可以先看《COM技術內幕》,再看《COM本質論》,如果你感興趣的話。我當時光看COM中的聚合,就搞得頭大。
學完COM,你能幹什麼呢?還不到時候。接下來就到ATL(活動模板庫)了,它是基於COM的框架。具體的內容我也沒怎麼學,我倒是買了本《ATL技術內幕》,留待以後學習吧。
拋開windows,但看C++本身,有很多有趣的東西。我首推《C++模板元編程》,這是一本考驗耐性和智力的書。同時你必然就接觸到了Boost庫,這個庫的名氣很大,我就不贅述了。如果你有興趣,可以看看腳本語言與C++的混合編程(僅是個人推薦,看你興趣),其中之一就是Boost::Python和C++的混合編程(當然,Python是一種獨立的腳本語言,Boost::Python只是用於C++編程的)。
還有什麼呢,還是模板,依舊是泛型編程。先提一個項目,「大芒果」,魔獸世界的網路變「單機」的伺服器。裡面應用到了很多這本書介紹的技術:《C++設計新思維-泛型編程與設計模式之應用》。當然,對於這么大一個項目,這只是冰山一角。
還有嗎?當然,數之不盡……

④ vc打開多個圖片 然後點擊按鈕顯示下一張 或上一張

PictureControl就是類CStatic,下面是VC++ WTL的編程用法,你著重看下WM_PAINT及設置圖片的函數就能知道,如何用在MFC里了。關於Load圖片的函數AtlLoadGdiplusImage(nRes, pstrType),我沒貼出來,主要是為了方便你了解。

當你切換圖片時,就調用SetBitmap(HBITMAP hBitmap)函數,就可以切換圖片了。SizeToFit()函數是根據你設定的圖片,自動調整控制項窗口大小。

#ifndef _THEMEDIMAGE_H_INCLUDE_
#define _THEMEDIMAGE_H_INCLUDE_
#pragma once

//////////////////////////////////////////////////////////////////////
// Themed Image control
//

class CThemedImageCtrl : public CWindowImpl<CThemedImageCtrl, CStatic>
{
public:
CWindow m_wndThemeParent;
CBrush m_brBack;
CBitmap m_bmpImage;

// Operations

BOOL SubclassWindow(HWND hWnd)
{
ATLASSERT(m_hWnd==NULL);
ATLASSERT(::IsWindow(hWnd));
BOOL bRet = CWindowImpl<CThemedImageCtrl, CStatic>::SubclassWindow(hWnd);
if( bRet ) Init();
return bRet;
}

void Init()
{
m_wndThemeParent = GetParent();
Invalidate();
}

void SetThemeParent(HWND hWnd)
{
ATLASSERT(::IsWindow(hWnd));
m_wndThemeParent = hWnd;
if( !m_brBack.IsNull() ) m_brBack.DeleteObject();
}

void SetBitmap(HBITMAP hBitmap)
{
m_bmpImage = (HBITMAP) ::CopyImage(hBitmap, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
if( IsWindow() ) Invalidate();
}

void SetBitmap(UINT nRes, LPCTSTR pstrType)
{
m_bmpImage = AtlLoadGdiplusImage(nRes, pstrType);
if( IsWindow() ) Invalidate();
}

void SizeToFit()
{
ATLASSERT(!m_bmpImage.IsNull());
BITMAP BmpInfo = { 0 };
m_bmpImage.GetBitmap(&BmpInfo);
ResizeClient(BmpInfo.bmWidth, BmpInfo.bmHeight);
if( IsWindow() ) Invalidate();
}

// Message map and handlers

BEGIN_MSG_MAP(CThemedImageCtrl)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
MESSAGE_HANDLER(WM_MOVE, OnSize)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
END_MSG_MAP()

LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
Init();
bHandled = FALSE;
return 0;
}

LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
if( !m_brBack.IsNull() ) m_brBack.DeleteObject();
return TRUE;
}

LRESULT OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
return 1;
}

LRESULT OnPaint(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
if( wParam != NULL )
{
DoPaint((HDC) wParam);
}
else
{
CPaintDC dc(m_hWnd);
DoPaint(dc.m_hDC);
}
return 0;
}

// Implementation

void DoPaint(CDCHandle dc)
{
CRect rcClient;
GetClientRect(&rcClient);

// Preserve background
if( m_brBack.IsNull() ) m_brBack = AtlGetBackgroundBrush(m_hWnd, m_wndThemeParent);
HBRUSH hOldBrush = dc.SelectBrush(m_brBack);
dc.PatBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), PATCOPY);
dc.SelectBrush(hOldBrush);

// Paint image (assume that it is a 32bit with alpha-pr-pixel)...
CDC dcCompat;
dcCompat.CreateCompatibleDC(dc);
BITMAP BmpInfo = { 0 };
m_bmpImage.GetBitmap(&BmpInfo);
BLENDFUNCTION bf = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
HBITMAP hOldBitmap = dcCompat.SelectBitmap(m_bmpImage);
dc.AlphaBlend(0, 0, rcClient.Width(), rcClient.Height(), dcCompat, 0, 0, BmpInfo.bmWidth, BmpInfo.bmHeight, bf);
dcCompat.SelectBitmap(hOldBitmap);
}

};
#endif //_THEMEDIMAGE_H_INCLUDE_

⑤ WTL高手進!高分!

就當SDK編程用就可以了, 只是一些繁瑣的功能通過模板繼承來簡化了
但是vs沒有提供像樣的class wizard, 你可以配合Visual FC輔助進行開發.
另外codeproject上有很多開源代碼, 也有給mfc程序員寫的wtl入門教程, 可以參考一下. 多做幾個小項目練練手就可以了, 既然樓主有基礎, 相信通過實踐動手很快就可以入門的~

但是COM技術是nt系列核心技術之一, 還是建議有時間你好好學一下, 俗話說磨刀不誤砍柴工, 你說對吧

⑥ 如何在WTL和MFC中使用ilib及如何靜態使用ilib庫

現在把我在實現過程中遇到的問題及解決方法列舉一下 以便大家以後遇到問題的時候做一個參考。

1.我喜歡用靜態庫,不喜歡用動態庫,用動態庫就好像穿衣服還要隨身攜帶衣架一樣,多餘還麻煩。

所以在用這個庫的時候 第一件事就是把動態庫變成靜態庫。還有改用成 unicode字元集

(1).找到uilib.h頭文件 注釋掉原有的定義:添加新的宏 #define UILIB_API

//#ifdef UILIB_EXPORTS
//#define UILIB_API __declspec(dllexport)
//#else
//#define UILIB_API __declspec(dllimport)
//#endif

(2)編譯後不會報錯,然後 在使用時就可以直接包含這個靜態庫了 同時要注意一點 還需要包含 幾個靜態庫oledlg.lib i.lib winmm.lib comctl32.lib

雖然也不簡單,但是卻可以讓程序生成後 只有一個exe 也沒有其他累贅。

2. 包含之後 編譯工程 會報錯createtextserver沒有定義什麼的。這個是因為新版本中加入了richedit支持,這個directui的 需要用到 texthost和textserver 這時候 需要引用richedit.dll和richedit.lib 為了方便,我把這部分的導入 放到了ilib庫裡面了。 至於是什麼代碼我就不貼了 導入庫的代碼 是個程序員就會了。

3.如果你的wtl ATL MFC文件已經包含了 atltypes之類的頭文件,那你會發現會出N多的 crect cpoint csize等 說不知道用哪個。因為ilib自己實現了這三個函數 和ATL MFC WL裡面的沖突了。那麼這時候怎麼辦呢?.. 當然是用宏了,我們在ilib的 uibase.h下面可以找到他們定義 在定義前加#ifndef DUI_NOTYPES 定義後追加 #endif 這樣我們在WTL中引入ilib庫的時候 引用前加入 #define DUI_NOTYPES 就可以屏蔽掉那些錯誤了。

4. 接下來的問題 都快讓我崩潰了,不過最後還是解決了。

在前面問題逐一解決之後 你會發現 項目里的很多地方都莫名其妙的報錯了,甚至連最基本的 CDC CmemeryDC Cpen什麼的都不認了 報一堆錯誤。

錯誤原因在於ilib裡面的 windowsx.h頭文件,這個是sdk編程人員不可能不知道的頭文件了,裡面是一些宏的定義,大大的方便了sdk編程。

而在這里卻成了阻礙,那麼怎麼辦呢? 我看了下報錯的地方 又看了下windowsx裡面宏,發現其實原因很簡單,裡面的一些宏定義和WTL的函數定義沖突了。那麼這個時候 我們需要使用微軟的 函數保護機制了。在我的項目中有沖突的是下面幾個函數 SelectFont SelectPen 其實還有很多 selectbrush等。報什麼錯就加什麼 沒有必要一次加齊。

#ifdef _INC_WINDOWSX
#undef SelectFont
#undef SelectPen
#endif // _INC_WINDOWSX

5.那麼到這個時候就可以正常的在WTL中使用ilib庫了。

6.那麼我們來說說 那棵樹的實現。

樹無疑 就是裡面的list靠縮進實現了。節點我選擇用以下模式做的。這樣後面排序的時候 我只需要交換CHorizontalLayoutUI就可以了 而無須改變

CListContainerElementUI 索引號了。

CListContainerElementUI

CHorizontalLayoutUI

控制項

控制項

CHorizontalLayoutUI

CListContainerElementUI

7.自動計算下滾動條,

CListContainerElementUI 沒有自動計算下滾動條的功能,可能是因為是容器 裡面的東西多少位置之類的都無法確定吧。

我的項目為了針對我這個項目 我在CHorizontalLayoutUI 插入了Ctextui 在底層庫裡面加入自動計算Ctextui 的寬度並設置CListContainerElementUI 寬度的邏輯就可以了

在這個過程總需要注意CListContainerElementUI 的setfixwight 有刷新的 會導致死循環 所以要加一個默認參數。

8.排序 排序就不多說的 原理比較簡單 一個快速排序,然後 顛倒CHorizontalLayoutUI和 tag就可以了、我的快排寫的 比較麻煩好像 因為當時比較著急 寫的時候比較亂 不過還可以 至少實現功能了,但是目前只是葉子節點排序,如果想實現非葉子節點排序也不是不可以,但是會比較麻煩 因為我也不用 就沒寫,有興趣的自己寫下吧。

demo真是非常之簡單,只有一個treeviwe 其他的什麼都沒有.連標題欄什麼都沒寫 那些我相信大家很簡單的就能寫出來。我把demo放到csdn上 想看的下載吧 。轉載。

⑦ 在WTL和MFC中,如何知道一個控制項的狀態是顯示(SW_SHOW)還是隱藏呢(SW_HIDE)

BOOL IsWindowVisible(HWND hWnd);

⑧ WTL編程問題

這和WTL沒關系吧?你的只是構造函數,聲明變數,然後再進行初始化,出了問題。


這有我寫的一個WTL 時鍾程序,你對比下看看。


⑨ 如何學習Windows編程

很多人從MFC開始學習,結果常常是一頭霧水,知難而退;也有人毅力堅強,熬過了MFC的陣痛期,最後卻是知其然而不知其所以然,並且思維被限制在MFC的框架之中,遇到稍微有點規模的程序就無從下手了。
以我個人的這些年的Windows開發經歷,我建議Windows上的學習路線如下:
首先當然是語言的學習,比如C或C++(STL),它是平台無關的
然後可以從《Windows程序設計》(by
Charles Petzold
)入門,從最原始的Windows API開始學習
接下來可以學習《Windows核心編程》(by
Jeffrey Richter
), 它會讓你比較深刻的理解Windows的前台和後台機制
學完上面2本書,對Windows系統已經比較熟悉了,再要深入的話可以學下《Windows 圖形編程》(by 袁鋒)。
至此,已經可以用API的方式開發大部分Windows應用程序了,
接下來可以學一些常用庫,比如MFC,WTL,ATL等,此時學習MFC和一開始就學習MFC已是截然不同的感覺,彼時痛苦難熬,此時會心一笑。
其他就是根據項目需要,專業知識的學習,比如COM技術,網路,D3D等。

閱讀全文

與wtl編程相關的資料

熱點內容
紅塔銀行app怎麼樣 瀏覽:562
農行app怎麼開網銀 瀏覽:649
java迭代器遍歷 瀏覽:301
閩政通無法請求伺服器是什麼 瀏覽:48
怎麼做積木解壓神器 瀏覽:203
王者榮耀解壓玩具抽獎 瀏覽:49
12位是由啥加密的 瀏覽:868
程序員編迷你世界代碼 瀏覽:895
php取現在時間 瀏覽:246
單片機高吸收 瀏覽:427
怎麼區分五代頭是不是加密噴頭 瀏覽:244
hunt測試伺服器是什麼意思 瀏覽:510
2013程序員考試 瀏覽:641
畢業論文是pdf 瀏覽:736
伺服器跑網心雲劃算嗎 瀏覽:471
單片機定時器計數初值的計算公式 瀏覽:801
win7控制台命令 瀏覽:567
貓咪成年app怎麼升級 瀏覽:692
360有沒有加密軟體 瀏覽:315
清除cisco交換機配置命令 瀏覽:751