㈠ 使用WTL新建一個對話框程序,但是加入按鈕和按鈕的點擊事件處理函數之後,編譯不通了
有什麼錯誤提示呢
㈡ WTL編程問題
這和WTL沒關系吧?你的只是構造函數,聲明變數,然後再進行初始化,出了問題。
這有我寫的一個WTL 時鍾程序,你對比下看看。
㈢ WTL8.0能在VC6.0中中使用嗎
我的電腦上同時安裝了VS2008 和VC6
我也是先解壓的WTL8.0 然後注冊setup9.0.js 然後又下載了WTL7.1 將其中的appwiz6.0拷貝wtl8。0中
運行成功後, 再把那個WTL的include目錄設置在菜單-工具-選項-目錄-include file下再編譯沒問題
㈣ 如何在WTL和MFC中使用ilib及如何靜態使用ilib庫
不可以
在使用DuiLib的時候,一種是使用他的DLL庫(或者lib庫)的方式,一種是直接使用源代碼。我偏向於使用後者,這樣在發布出去的程序中,就會盡量少一些庫文件的煩惱。我們下載的DuiLib的源碼中,包括測試程序都是使用dll的形式。
但在編譯的時候,會有幾個錯誤:
(1) stb_image.c XUnzio.cpp這兩個文件的預編譯頭問題。取消使用預編譯文件即可。
(2)error C2371: 「IDispatchEx」: 重定義 問題。
UIFlash.h文件中
#import"..Utils/Flash11.tlb" raw_interfaces_only, named_guids
改為:
#import"..Utils/Flash11.tlb" raw_interfaces_only, named_guids, rename("IDispatchEx","IMyDispatchEx")
㈤ 如何在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上 想看的下載吧 。轉載。
㈥ cwindows應用程序的唯一入口點是
熱門頻道
首頁
博客
研修院
VIP
APP
問答
下載
社區
推薦頻道
活動
招聘
專題
打開CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
c++ 桌面應用程序
打開APP
使用C++代碼創建一個Windows桌面應用程序 轉載
2019-12-04 14:45:20
anmily0566
碼齡3年
關注
下面六星教育整理使用C++代碼創建一個Windows桌面應用程序,供大家學習參考。
WinMain函數
Windows應用程序的唯一程序入口。
函數原型
int WINAPI WinMain
{
HINSTANCE hInstancem
HINSTANCE hPreInstance,
LPSTR lpCmdLine,
int nCmdShow
}
WINAPI定義如下
#define WINAPI _stdcall
_stdcall是一個函數調用約定,除此之外,還有__cdecl,fastcall,thiscall,naked call等函數調用約定。
_stdcall調用約定又稱Pascal調用約定,也是Pascal語言的調用約定。它使用的方式為:
1 int __stdcall sum(int a,int b);
__stdcall:函數的多個參數由調用者按從右到左的順序壓入堆棧,被調用函數獲得參數的序列是從左到右的的;清理堆棧的工作由被調用函數負責。
在Visual C++中,常用宏WINAPI或CALLBACK來表示__stdcall調用約定。
更詳細的說明可以查看
https://docs.microsoft.com/en-us/cpp/cpp/stdcall?view=vs-2019
__cdecl(也可寫成_cdecl)調用約定又稱C調用約定,是C函數默認的調用約定,也是C++全局函數的默認調用約定,通常省略。
如
int sum(int a,int b);
int __cdecl sum(int a,int b);
__cdecl:函數的多個參數由調用者按從右向左的順序壓入堆棧,被調函數獲得參數的序列是從左到右的;清理堆棧的工作由調用者負責
。
更詳細的說明可以查看
https://docs.microsoft.com/en-us/cpp/cpp/cdecl?view=vs-2019
WinMain函數的各參數說明
hInstance
應用程序當前運行的實例的句柄,該句柄由Windows系統生成。
hPrevInstance
當前實例的前一個實例的句柄,在Win32環境下,該參數總是NULL,不再起作用
lpCmdLine
一個以空終止的字元串,代表傳遞給程序的命令行參數。
nCmdShow
指定窗口的顯示狀態
常用值如下
nCmdShow = 0;不顯示
nCmdShow = 1;正常顯示(默認)
nCmdShow = 2;最小化顯示
nCmdShow = 3;最大化顯示
使用代碼創建Windows程序的步驟
1、設計一個Windows類
2、在Windows系統中注冊Windows類
3、用該Windows類創建一個窗口
4、創建一個消息循環
5、創建一個窗口過程函數WndProc
一、設計Windows類
在創建一個窗口前,必須對窗口進行設計,指定窗口的屬性。系統已經定義了WNDCLASS結構用於描述待創建窗口的參數。
WNDCLASS聲明如下
typedef struct tagWNDCLASSA {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
} WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA;
下面介紹各參數
style
窗口樣式,可用值如下
CS_VREDRAW:垂直重繪,當窗口垂直方向上的高度發生變化時,將重新繪制整個窗口。如果沒有指定這一樣式,在垂直方向上調整窗口高度時,將不會重繪窗口。
CS_HREDRAW:水平重繪,當窗口水平方向上的寬度發生變化時,將重新繪制整個窗口。如果沒有指定這一樣式,在水平方向上調整窗口高度時,將不會重繪窗口。
CS_OWNDC:獨占設備描述表,為該類中的每個窗口分配一個單值的設備描述表。
CS_SAVEBITS:在一個窗口中保存用戶圖像,以便於在該窗口被遮住、移動時不必每次刷新屏幕。但是,這樣會佔用更多的內存,並且比人工進行同樣操作時要慢得多。
CS_DBLCLKS:使窗口可以檢測到滑鼠雙擊事件,當用戶在窗口中雙擊滑鼠時,向窗口過程發送滑鼠雙擊消息
CS_BYTEALLGNCLIENT:滑鼠用戶區域按位元組對齊顯示。
CS_BYTEALLGNWINDOW:滑鼠用戶窗口按位元組對齊顯示。
CS_PARENTDC:在父窗口中設定一個子窗口的剪切區,以便於子窗口能夠畫在父窗口中。
CS_NOCLOSE:系統菜單中沒有CLOSE菜單項,窗口沒有關閉按鈕。
lpfnWndProc
指向窗口過程函數的函數指針。窗口過程函數是一個回調函數,針對Windows的消息處理機制,窗口過程函數被調用的過程如下:
1、在設計窗口類的時候,將窗口過程函數的地址賦給lpfnWndProc成員變數
2、調用RegisterClass(&wndclass)注冊窗口類,系統就有了用戶編寫的窗口過程函數的地址
3、當應用程序接收到某一窗口的信息時,調用DispatchMessage(&msg)將消息回傳給系統。系統則利用先前注冊窗口類時得到的函數指針,調用窗口過程函數對消息進行處理
cbClsExtra
Windows系統為窗口類結構分配追加的額外位元組數。一般為0
cbWndExtra
Windows系統為窗口實例分配或追加的額外位元組數,一般為0。如果應用程序使用資源文件里的CLASS指令創建對話框,並用WNDCLASS結構注冊對話框框時,cbWndExtra必須設置成DLGWINDOWEXTRA
hInstance
包含窗口過程程序的實例句柄。一般直接賦WinMain()的hInstance即可
hIcon
窗口類的圖標資源。這個成員變數必須是一個圖標資源的句柄。可以使用LoadIcon()函數載入圖標,如果hIcon為NULL,窗口將使用系統提供的默認圖標
hCursor
窗口類的游標句柄。這個成員變數必須是一個游標資源的句柄。可以使用LoadCursor()函數載入游標。如果hCursor為NULL,應用程序必須在滑鼠進入應用程序窗口時,明確設置游標的形狀
hbrBackground
窗口類的背景畫刷句柄。當窗口發生重繪時,系統使用這里指定的畫刷來填充窗口的背景。該成員可以指定為用於繪制背景的物理畫刷的句柄,也可以指定為標準的系統顏色值。如下:
BLACK_BRUSH 黑色
DKGRAY_BRUSH 深灰
GRAY_BRUSH 灰色
HOLLOW_BRUSH 空
LTGRAY_BRUSH 淺灰
NULL_BRUSH 等同於HOLLOW_BRUSH
WHITE_BRUSH 白色
BLACK_BRUSH 黑色
lpszMenuName
指向一個以空終止的字元串,該字元串描述菜單的資源名。若使用整數來標識菜單,需要用MAKEINTRESOURCE宏來進行轉換。如果lpszMenuName設置為NULL,那麼基於窗口類創建的窗口將沒有默認菜單
lpszClassName
指向一個以空終止的字元串,該字元串描述窗口類的名字。這個類名可以是由RegisterClass或者RegisterClassEx注冊的名字,或者是任何預定義的控制項類名
WNDCLASS使用實例如下
WNDCLASS wc;
二、注冊Windows類
Windows類設計完成時,需要調用RegisterClass()函數去注冊這個類,才可以創建該類型的窗口
ATOM RegisterClass(
const WNDCLASSA *lpWndClass
);
注冊代碼如下
if(!RegisterClass(&wc))
{
return 0;
}
三、創建窗口
使用CreateWindow函數創建窗口,如果函數調用成功,返回值為新窗口的句柄;如果調用失敗,返回值為NULL。可以使用GetLastError()函數獲取錯誤信息
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hInstance,
PVOID lpParam
);
《C/C++入門到精通企業級項目實戰http://ke.qq.com/course/349354》來自世界百強公司一線互聯網的大師執教,分享多年寶貴開發經驗,全程項目實戰貫穿,由淺入深通俗易懂。如果對C++感興趣的話,想學C++培訓的,可以搜索六星教育C++培訓,我們將竭誠為你解答。
原文鏈接:https://www..com
打開CSDN,閱讀體驗更佳
C++桌面應用開發(Qt學習)——QMainWindow(2)_尐鳴的博客_c++...
設置到窗口中 setStatusBar(statusBar); statusBar->addWidget(label);放左側信息 代碼如下: ··· //狀態欄 最多一個,在窗口最下側 QStatusBar *statusBar = new QStatusBar(this); //放入到窗口中 setStatusBar(statusBar); /...
C++桌面應用開發(Qt學習)——對話框(1)_尐鳴的博客_c++桌面應...
connect(ui->actionnew,&QAction::triggered,[=](){ // QDialog dlg2(this);// 該對象創建在棧中,執行完lambda就銷毀,對話框一閃而過 // dlg2.show(); //非模態 QDialog *dlg2 = new QDialog(this);//該對象創...
C++桌面程序 掃雷教學
掃雷游戲製作 桌面程序 Windows桌面程序 C/C++都能學會 沒有類 想玩的寫可以下載到桌面遊玩
繼續訪問
使用 C++ 創建你的第一個 Metro 風格應用
WindowsMetro 風格應用專門針對 Windows 8 Consumer Preview 所提供的用戶體驗量身定製。每個出色的 Metro 風格應用都遵循特定的設計准則,這使得此類應用與傳統的桌面應用相比外觀更漂亮、反應更靈敏、行為更直觀。開始創建 Metro 風格應用之前,建議你先閱讀新模型的設計理論。你可以在設計 Metro 風格的應用中找到詳細信息。 在此,我們介紹了有助於你使
繼續訪問
如何創建一個最簡單的Windows桌面應用程序 (C++)_隨煜而安的博客-CSDN...
正如每個 C/C++控制台應用程序在起始點必須具有 main 函數,每個基於 Win32 的應用程序的函數也必須具有 WinMain 函數。WinMain就相當於是入口函數,並且具有固定的語法: intWINAPIWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR...
1.2編寫C++應用程序&1.3學習桌面應用程序的編程_xky1306102chenhong的博...
1.Visual C++可以開發的應用程序有兩大類:桌面應用程序和Windows Store 應用程序。 2.本書關注如何使用MFC(Microsoft Foundation Classes)和C++建立桌面應用程序。 3.windows桌面應用程序的應用程序編程介面稱為Win 32 ...
熱門推薦 如何創建一個最簡單的Windows桌面應用程序 (C++)
如何創建一個最簡單的Windows桌面應用程序 (C++) 最近剛開始學習C/C++開發Windows應用程序,這里將會以零基礎的視角把學習過程完全記錄下來。如果你也剛剛起步,那本文一定非常適合你。 進入正題,本文討論如何使用Visual Studio生成一個最簡單的C窗體應用程序,並向用戶顯示Hello~ 下面我們一步步來介紹,對於涉及代碼的地方,我們
繼續訪問
C語言開發windows桌面程序,演練:創建傳統的 Windows 桌面應用程序 (c + +)
演練:創建傳統的 Windows 桌面應用程序 (c + +)05/28/2020本文內容本演練演示如何在 Visual Studio 中創建傳統的 Windows 桌面應用程序。 要創建的示例應用程序使用 Windows API 顯示 "Hello,Windows desktop!" 應用程序。 可以將本演練中開發的代碼作為模式來創建其他 Windows 桌面應用程序。Windows API (...
繼續訪問
Qt-跨平台的C++圖形用戶界面應用程序框架(一)_十年編程老舅的博客-CSD...
經過這幾年的發展,Qt不但擁有了完備的C++圖形庫,而且也極大的提高了Qt開發跨平台應用程序的能力。 Qt可以同時支持桌面應用程序開發、嵌入式開發和移動開發,甚至它可以做移動開發,覆蓋了現有的所有主流平台。你只需要編寫一次代碼,發布到不...
c++桌面應用繪制圖片api_桌面版應用程序的前世今生_weixin_39797324的博...
桌面版應用程序歷史 桌面應用程序,又稱為GUI程序。可以分為以下幾個階段: VB, 上古程序員的開發工具,曾經全球第一的開發語言,拖拽式的圖形化開發讓它成為極佳的桌面開發工具。微軟依靠其操作系統的優勢,一直壓制同時期的競爭對手delphi。
C++桌面應用開發(Qt學習)——QMainWindow(1)
QMainWindow(1)
繼續訪問
c語言應用程序的開發步驟,C語言如何開發桌面GUI應用程序?
這里介紹一種非常簡單的方法,使用GTK,一個基於C語言開發的跨平台圖形工具包,可以直接使用C語言快速完成桌面GUI程序的開發,下面我簡單介紹一下實現過程,主要內容如下:1.首先,下載安裝GTK,這里有2種方法,一種是按照GTK官網的方法一步一步配置,還有一種是直接使用打包好的GTK-bundle包,這里以第二種方法為例,直接使用打包好的GTK-bundle包,這個可以直接在CSDN上找到下載,如下...
繼續訪問
C++桌面應用開發(Qt學習)--對象模型(對象樹)_尐鳴的博客_c++...
這種機制在GUI程序設計中相當有用,例如:一個按鈕有一個QShortcut(快捷鍵)對象作為其子對象,當我們刪除按鈕時,這個快捷鍵子對象理應被刪除。 QWidget是能夠在屏幕上顯示的一切組件的父類
C++使用代碼創建一個Windows桌面應用程序
WinMain函數 Windows應用程序的唯一程序入口。 函數原型 1 int WINAPI WinMain 2 { 3 HINSTANCE hInstancem 4 HINSTANCE hPreInstance, 5 LPSTR lpCmdLine, 6 int nCmdShow 7 } WINAPI定義如下 #de...
繼續訪問
C++桌面應用開發(Qt學習)--Qt簡介及第一個Qt程序
Qt簡介及第一個Qt程序
繼續訪問
求助 ! API版HelloWorld
//wnd2.cpp#include "wnd2.h" //頭文件//全局變數char szTitle[] = "Easy Hello Program"; //標題條字元串char szWindowClass[] = "W32"; //窗口類名char szMenuName[] = "NULL"; //菜單名/*********************
繼續訪問
C/C++程序怎麼生成的
一個C/C++程序的生要經以下步驟: 1.編寫文本代碼,生成C或cpp文件,這時候它還是文本形式(人工編輯的代碼形式) 2.編譯,就是compile,由C編譯程序對你寫的代碼進行詞法和句法分析,發現並報告錯誤,有錯時編譯不能通過。如若無錯,則生成中間代碼,擴展名為obj,此時它便是二進制的了; 3.連接,在匯編里稱link,在C里叫生成,即build,它的作用是生成可執行的exe文件。由於一個程序的源碼可由多個文件組成。這些文件在第二步中分別編譯,生成各自的目標文件(*.obj),這一步的作用便是將這些o
繼續訪問
創建一個 C++ 控制台應用程序項目
創建一個 C++ 控制台應用程序項目1. 先決條件2. 創建您的應用程序項目 C++ 程序員的通常起點是在命令行上運行的"Hello, world!"應用程序。這就是您將在此步驟中在 Visual Studio 中創建的內容。 1. 先決條件 在計算機上安裝並運行帶有 C++ 工作負載的 Visual Studio。如果尚未安裝,請參閱在 Visual Studio 中安裝 C++ 支持。 2. 創建您的應用程序項目 Visual Studio 使用 projects 來組織應用程序的代碼,並使用 solu
繼續訪問
創建第一個C++應用程序
創建第一個C++應用程序 創建第一個C++應用程序 創建第一個C++應用程序
VS2017C++windows桌面應用程序項目OpenCV及Boost庫測試
這里是一個VS2017的windows桌面應用程序項目,項目已經配置了64位的OpenCV4.0庫和64位的Boost庫,其中OpenCV庫和Boost庫都安裝在D盤里,大家可以在項目的附加庫目錄和包含目錄里查看安裝位置,以便大家順利編譯,另外想要了解怎麼配置的可以查看本人博客。
C++ 實現的一個小型的桌面管理程序
C++ 實現的一個小型的桌面管理程序。 這是一個小工具,可以添加程序的快捷方式, MFC VS2008
最新發布 1.1編寫一個簡單的C++程序
無
繼續訪問
【Visual Studio】Visual Studio 2019 創建 Windows 控制台程序 ( 安裝 『使用 C++ 的桌面開發『 組件 | 創建並運行 Windows 控制台程序 )
一、安裝 C++ 桌面開發組件、 二、創建並運行 Windows 控制台程序
繼續訪問
C/C++教程 第九章 —— windows編程入門
本章為該系列教程的第九章,主要講解Windows編程中一個窗口的最基礎實現
繼續訪問
小白學習C++的第四步:了解C++程序由編寫到執行的過程
1
繼續訪問
使用WTL進行Windows桌面應用開發-第一部
<ol> <li> 基於Windows平台的ATL/WTL桌面應用程序開發. </li> <li> 使用C/C++作為開發語言, 開發Windows本地桌面程序. </li> <li> WTL界面庫是MFC的替代選擇, 是Win32界面編程的薄封裝,可以說學會WTL開發即學會了Win32界面開發。 </li> <li> 適合中小型公司開發基於C/C++語言的客戶端項目, 因為WTL可以進行快速開發,不需要其他語言. </li> <li> 由淺入深介紹WTL桌面開發涉及到的原理和技術, 從簡單界面到自定義界面,自定義按鈕表格都有介紹。 </li> <li> 在繪制窗口元素如文本,圖形介紹了GDI和GDI+的常用的開發技巧。 </li> <li> 介紹了項目開發中遇到的一些細節問題. </li> <li> WTL配置少, 只有頭文件,不需要編譯為庫, 性能高,不依賴第三方庫,文件小, 運行快,調試方便, 升級方便。 </li> </ol>
繼續訪問
c++ 桌面應用程序
寫評論
評論
7
點贊
踩
分享
㈦ wtl9.0 支持win2000嗎
支持,WTL只是個框架,不過可能編譯時,有些Windows版本需要設置下。