最近不知道為什麼一直在用Linux...
想說正好趁這次機會把Linux的分支關係寫一下,所以就有這篇了。
一般來說,Linux的分支主要有三大分支,分別為 debian、slackware、redhat。
除了三大分支以外,還有所謂的獨立系。
不過獨立系太麻煩了所以就不寫在這次的範圍內。
雖然說不講獨立系,不過還是大概說一下。
在獨立系中比較有名的是 Gentoo。
而 Google Chrome OS / Chromium OS 也是被歸類為獨立系的系統之一。
Google Chrome OS 從 2010年2月之後,底層從 ubuntu 換成了 Gentoo。
獨立系大概就這個比較重要。
各大分支最大的差異在 package 管理系統。
基本上每家都有自己的管理系統。
管理系統本身分為三個部分,形式、系統本體、前端。
debian 所使用的 package 是 deb 形式,而其管理系統為 dpkg ,前端為 apt。
redhat 所使用的 package 是 rpm 形式。
管理系統為 Redhat Package Manager(RPM),前端為 yum(Yellowdog Updater Modified)。
slackware 的眾多分之中, package 有使用 deb 形式也有使用 rpm 形式,管理系統為 ZYpp。
slackware 分支中的 openSUSE 所使用的即是 rpm 形式配上前端 Zypper/YaST。
某種程度上來說, slackware 是最早的分支版本。所以就從這分支開始說好了。
說到 slackware 大概最有名的就是 S.u.S.E.。
SUSE Linux 在 2003 年被 Novell 買去之後就變成了 open source。
然後改名成為現在的 openSUSE。
不過變成 openSUSE 只是其中一支分支。
除了不用錢的版本當然還是有商用版。
商用版則變成 SUSE Linux Enterprise Server/Desktop(SLES/SLED)。
openSUSE 在 Linux 版本分支的界定上感覺點微妙。
openSUSE 在 package 形式上是使用跟 radhat 一樣的 rpm 形式。
所以好像也有人把 openSUSE 認定為 redhat 分支的一部分?
不過從歷史演化上來看, openSUSE 應該還是屬於 slackware 分支。
slackeware 分支不知道為什麼在亞洲感覺好像快要消失一樣。
甚至不是很多人知道有這麼一個分支存在...
可是這在歐洲明明就是很大的分支...
在亞洲主要還是以 redhat 和 debian 為比較大宗。
debian 分支比較有名的就是 Ubuntu。
debian 在版本釋出時會有四個種類。
一般在使用的 stable 穩定版。
準備用來做下次穩定版的 testing 測試版。
開發者向的 unstable 不穩定版。
變化很劇烈的 experimental 實驗版。
在 debian 的開發順序中
當 package 在 experimental 版玩一玩發現可以用的時候就會丟進 unstable 版。
修正完基本穩定性之後就會進入 testing 版。
當 testing 版確定沒有什麼大問題之後就會變成 stable 版釋出。
而 sid 版指的就是 unstable 版。
testing 和 unstable 最大的差異在系統安全性。
unstable 的版本並不保證系統可以正常的運作。
testing 版則是就算有BUG也能在不影響使用的情況下運作。
stable 就沒什麼特別的...就是很穩定的版本。
redhat 分支則有許多版本。
redhat 分支就有許多有名的版本。
像是 Fedora、RHEL、CentOS。
雖然從分支歷史上來看其實看不出太大的關係。
不過實際關係應該是 Fedora → RHEL → CentOS。
簡單來說 redhat 分支中,Fedora 玩一玩覺得不錯的東西就會丟進 RHEL 裡面。
而將與商用無關的不分丟掉後,就變成了 CentOS。
這是三個版本最主要的關係和差異。
Fedora 的更新速度很快,在穩定之後才會加入 RHEL 裡。
RHEL 除去商用部分,做成 CentOS。
某種程度上來說,Fedora 其實就是 redhat 的測試版。
而 RHEL 則是穩定的商用版。
CentOS 則是穩定的免費版。
簡單來說比較有名的 linux 分支的關係大概是這樣。
當然有些東西表達的並不是非常精確。
不過應該沒有相距太遠意思到了就好XD
相關來源:
CentOSとは (CentOS/RHEL/Fedoraの関係についてまとめてみた)
http://mo-mo.hatenablog.com/entry/2014/02/13/125326
openSUSE と CentOS 全然ちがいますか? どっちが良いですか?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1447579574
linux の勉強をしたいのですが、Cent OSとSuse linuxで迷っています。 どちらがおすすめでしょうか。
http://q.hatena.ne.jp/1163282166
各種Linuxディストリビューション解説
http://kapper1224.sakura.ne.jp/UNIX2.html
Red Hat系とDebian系の違いを教えて下さい。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1029959760
Linuxについて質問です。Debian系、Red Hat系、Slackware系 、独立系がありますが、具体的にはどのような違いがあるんですか。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11104091486;_ylt=A2RiHzvSe1FVV1QAoXC0_PN7?pos=2&ccode=ofv
GNU/Linux Distribution Timeline
http://futurist.se/gldt/
Slackware
http://dic.nicovideo.jp/a/slackware
Linuxディストリビューション
http://dic.nicovideo.jp/a/linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3
Linuxディストリビューション
http://ja.wikipedia.org/wiki/Linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3#Slackware.E7.B3.BB
Slackware
http://ja.wikipedia.org/wiki/Slackware
zypper の紹介
http://qiita.com/ftake/items/ff79832f15ce49725b52
openSUSE
http://ja.wikipedia.org/wiki/OpenSUSE
SUSE Linux Enterprise Server
http://ja.wikipedia.org/wiki/SUSE_Linux_Enterprise_Server
Debian
http://ja.wikipedia.org/wiki/Debian
パッケージ管理システム
http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0
ZYpp
http://zh.wikipedia.org/wiki/ZYpp
openSUSE におけるパッケージ管理入門
http://www.slideshare.net/ftake/20111120-10248066
2015年5月20日水曜日
2015年1月12日月曜日
[VMware] 在 Windows 8.1 上的 VMware Workstation 11 裡安裝 MAC OS X 10.10 Yosemite
必要的東西
- 有 VT 功能的 intel CPU 主機一台 ...沒有這個就不用玩了w
- VMware workstation 11
- Unlocker 2.0.3
- OS X 10.10 Yosemite 的 ISO 可啟動安裝檔一份
安裝 VMware Workstation
沒什麼意外的話,應該直接下一步到底,全部使用預設就可以了。
讓 VMware Workstation 認識 MAC OS X
要讓 11 版的 VMware Workstation 認識 MAC OS X 需要使用 2.0 以上的 Unlocker。2.0 以下的版本 只能對應到 10 版以前的 VMware Workstation。
2.0 以上的版本 才能正確的看到 "Apple MAC OS X" 的選項
在 VMware Workstation 裡安裝 OS X 10.10 Yosemite
有空再補圖...w相關問題
- 在這篇的動作中,一個很矛盾的問題是 MAC OS X 10.10 Yosemite 的原始安裝檔雖然可以從 AppStore 免費下載,但這個下載動作的預設條件卻是需要在 MAC OS X 上才能下載並以升級系統的方式進行安裝。而且下載來的 Yosemite 也必須在 MAC 上透過指令轉換成 iso檔,才能在 Windows PC 上使用。這個問題的兩個解決方法: 1. 改裝10.9 Mavericks 然後再升級成 10.10 Yosemite,但同樣的問題只會不斷的發生,所以這可能不是個好方法。 2. 直接用別人做好的 ISO 檔進行安裝,這個方法是確實可行的,但其中的缺點是,無法得知ISO檔是不是有問題或經過修改的檔案。
- 在 VM 中最常遇到的問題之一,螢幕解析度要變大的問題。預設安裝完的系統螢幕解析度是 1024 × 768 ,這比萬惡的1366 × 768 還要小。所以大部分應該都會想辦法讓解析度提升。但是在這篇中沒有這麼做的原因是,在VMware Workstation 10 所使用的 VMsvga ,在現時點(2015/01/12)對 11 版的 VMware Workstation 支援度並不好,使用後客體系統會出現不穩定,所以放棄。如果不介意的話就將就點用吧...w
參考來源
Windows上のVmwareにMac OS X Yosemiteをインストールhttp://ichitaso.com/vmware/yosemite-on-windows-vmware/
VMware安裝 OS X Yosemite 10
http://bensnote.com/?p=190
2014年9月14日日曜日
[Linux] VirtualBox上執行Fedora 20安裝 guest additions的方法
Fedora 每次安裝 guest additions 都好麻煩
所以就有這篇了ww
1. 更新 Fedora
2. 安裝 核心標頭檔 和 建置 工具
3. 重開機
4. 掛載 VirtaulBox guest additions 在 虛擬機器的 選單上 選擇 Devices > Insert guest additions CD image 這時候應該就會把 guest additions 掛到光碟機上 (/dev/cdrom 或是 /dev/sr0)
5. 創建工作路徑 在 root 資料夾底下創建一個叫做 vboxcd 的資料夾
6. 掛載到光碟內容到資料夾中
7. 確認掛載成功
8. 執行
9. 不管執行結果如何 最重要的是一定要看到 建置是成功的!
10. 重開機
1. 更新 Fedora
$ sudo yum distro-sync
2. 安裝 核心標頭檔 和 建置 工具
$ yum -y install kernel-devel kernel-headers dkms gcc gcc-g++
3. 重開機
$ reboot
4. 掛載 VirtaulBox guest additions 在 虛擬機器的 選單上 選擇 Devices > Insert guest additions CD image 這時候應該就會把 guest additions 掛到光碟機上 (/dev/cdrom 或是 /dev/sr0)
5. 創建工作路徑 在 root 資料夾底下創建一個叫做 vboxcd 的資料夾
$ cd /root $ mkdir vboxcd
6. 掛載到光碟內容到資料夾中
$ sudo mount /dev/cdrom ~/vboxcd這時候應該會出現一些訊息
mount: /dev/sr0 is write-protected, mounting reading-only
7. 確認掛載成功
$ ls
8. 執行
$ ./VBoxLinuxAdditions.run
9. 不管執行結果如何 最重要的是一定要看到 建置是成功的!
Building the VirtualBox Guest Additions kernel modules [ OK ]
10. 重開機
$ reboot應該就會成功了w
2014年4月5日土曜日
[開發環境] 應用程式開發之開發環境版本
在程式開發中,經常會遇到版本的問題。
這邊筆記主要記錄開發環境的版本對應關係。
這裡所提的版本,有四個部分:
都可只安裝 3.5 即可執行。
4.0、4.5、4.5.1 所開發的程式,除了極少部分的 4.0,基本上可以在有安裝 4.5.1 的機器上執行。
這邊筆記主要記錄開發環境的版本對應關係。
這裡所提的版本,有四個部分:
- 作業系統OS的版本(Windows XP、Vista、7、8、8.1...)
- .NET Framework的版本(1.0、1.1、2.0、3.0、3.5、4.0、4.5、4.5.1...)
- C++的版本(C++98、C++03、C++0x、C++11...)
- Visual Studio的版本(2002、2003、2005、2008、2010、2012、2013...)
Visual Studio 和 C++ 的版本
在不同的C++版本中,有許多不同的語法,Visual Studio 所支援的程度也不相同。
目前確定是 Visual Studio 2013也還沒有完整的支援C++11。
Visual Studio版本 | 支援C++版本 |
---|---|
Visual Studio 2005 | C++03/部分C++0x |
Visual Studio 2008 | C++03/部分C++0x |
Visual Studio 2010 | 更多的C++0x |
Visual Studio 2012 | 部分的C++11 |
Visual Studio 2013 | 更多的C++11 |
除非開發時使用到相當複雜的用法,不然幾乎沒有太大的差別。
在C++各版本中,某些敘述語法是無法向上相容的,
VS2013 所使用的敘述有時候在 VS2012 是會無法解讀的。
同樣的情況也會發生在其他的版本中。
Visual Studio 的版本所伴隨的功能一直增加,使得開發作業變得越來越容易。
因為許多原因而持續使用舊版本的 Visual Studio 對於開發者來說,可能會比較辛苦。
根據不同的 Visual Studio 版本,所使用的 .NET Framework 版本也不同。
雖然 Visual Studio 每個版本皆有一定範圍的 .NET Framework版本可以選擇。
不過根據編譯器的版本還是會有些問題。
2.0、3.0、3.5 三個版本可以完全共存。3.5 有包含 2.0 和 3.0。
在C++各版本中,某些敘述語法是無法向上相容的,
VS2013 所使用的敘述有時候在 VS2012 是會無法解讀的。
同樣的情況也會發生在其他的版本中。
Visual Studio 的版本所伴隨的功能一直增加,使得開發作業變得越來越容易。
因為許多原因而持續使用舊版本的 Visual Studio 對於開發者來說,可能會比較辛苦。
根據不同的 Visual Studio 版本,所使用的 .NET Framework 版本也不同。
雖然 Visual Studio 每個版本皆有一定範圍的 .NET Framework版本可以選擇。
不過根據編譯器的版本還是會有些問題。
Visual Studio 和 .NET Framework 的版本
Visual Studio | 對應 .NET Framework | 附註 |
---|---|---|
Visual Studio.NET 2002 | 1.0 | |
Visual Studio.NET 2003 | 1.1 | |
Visual Studio 2005 | 2.0 | |
Visual Studio 2008 | 2.0, 3.0, 3.5 | |
Visual Studio 2010 | 4.0 | 安裝 .NET Framework 3.5 即可選擇 2.0, 3.0, 3.5 |
Visual Studio 2012 | 4.0, 4.5 | 安裝 .NET Framework 3.5 即可選擇 2.0, 3.0, 3.5 |
Visual Studio 2013 | 4.5.1 | 安裝 .NET Framework 3.5 即可選擇 2.0, 3.0, 3.5 |
2.0 或 3.0 所開發的程式,基本上可以在 3.5 SP1 下完整使用。
4.0 和 4.5 無法共存。4.0 和 4.5.1 也無法共存。
在 4.0 的環境中安裝 4.5 會被直接把 4.0 升級取代成 4.5。
4.0 所開發的程式,除了極少部分的程式,幾乎都可以在 4.5 或 4.5.1中正常執行。
OS 和 .NET Framework 的版本
OS版本和各版本的 .NET Framework 的對應關係
OS版本 | 1.0 | 1.1 | 2.0 | 3.0 | 3.5 | 4.0 | 4.5 | 4.5.1 |
---|---|---|---|---|---|---|---|---|
2000 | V | V | V | - | - | - | - | - |
XP | V | V | V | V | V | V | - | - |
Server 2003 | V | VV | V | V | V | V | - | - |
Server 2003 R2 | V | VV | VV | V | V | V | - | - |
Vista | - | V | VV | VV | V | V | V | V (SP2) |
Server 2008 | - | V | VV | VV | V | V | V | V (SP2) |
7 | - | - | VV | VV | VV | V | V | V (SP1) |
Server 2008 R2 | - | - | VV | VV | VV | V | V | V |
8 | - | - | V | V | V | - | VV | V |
Server 2012 | - | - | V | V | V | - | VV | V |
8.1 | - | - | V | V | V | - | - | VV |
- 符號
- -: 無法安裝
- V: 可以安裝
- VV: 標準配備
都可只安裝 3.5 即可執行。
4.0、4.5、4.5.1 所開發的程式,除了極少部分的 4.0,基本上可以在有安裝 4.5.1 的機器上執行。
也就是說如果機器同時存在 3.5 和 4.5.1 兩個版本,則應該就可以執行 2.0 ~ 4.5.1 的每個版本。
.NET Framework 的支援期限
.NET Framework 版本 | 延長支援 結束日期 | 實際 結束日期 | 標準搭載 作業系統 | 開發工具 |
---|---|---|---|---|
2.0 SP2 | 2016/04/12 | 2020/01/14 依據 3.5 SP1 | Windows Server 2003 R2 | Visual Studio 2005 |
3.0 SP2 | 2011/07/12 | 2020/01/14 依據 3.5 SP1 | Windows Vista SP2 Windows Server 2008 | Expression Blend |
3.5 SP1 | 2020/01/14 依據 OS | 2020/01/14 依據 OS | Windows 7 Windows Server 2008 R2 | Visual Studio 2008 |
4.0 | 2020/09/08 依據 VS 2010 | 2020/09/08 依據 VS 2010 | - | Visual Studio 2010 |
4.5 | 2023/01/10 依據 OS、VS | 2023/01/10 依據 OS、VS | Windows 8 Windows Server 2012 | Visual Studio 2012 |
4.5.1 | 2024/04/09 依據 VS 2013 | 2024/04/09 依據 VS 2013 | Windows 8.1 Windows Server 2012 R2 | Visual Studio 2013 |
相關來源:
.NET Framework のサポート期限
[C#][.NET]アプリケーション開発と保守における考慮事項
.NET Framework のバージョンの互換性
.NET Framework 4.5と下位バージョンの互換性がカオス
.NET Framework のバージョンおよび依存関係
Windows 8 / Windows Server 2012 用の .NET 4.5.1
.NET Framework 4.0 と 4.5 は CLR のバージョンが異なる
.NET Framework 4.5 のインストールにより Visual Studio 2010 が起動するビルドツールが 64 bit 版に変化する場合がある
Microsoft Visual Studio 大集合
.NET Framework のサポート概要
Microsoft Visual C++ Wikipedia
[Visual Studio] 複數版本的Visual Studio共存
Visual Studio 多個版本共存的筆記。
雖然這麼說,不過是VC++的東西。
在C++的開發中,include directory 和 library directory 雖然可以在每個專案中各自設定,
但也可以全域的方式設定。
此篇筆記是在記錄以全域方式設定 include directory 和 library directory,
使所有的專案都可以使用這樣的設定。
在 Visual Studio 中,2010、2012、2013這三個版本的MS Build都沒有改變,
所以基本上這三個版本都是共用這一個 Property sheet 設定。
在預設路徑下, property sheet 可以在下方的路徑中找到
32位元的專案
C:\Users\<user-name>\AppData\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props
64位元的專案
C:\Users\<user-name>\AppData\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props
用來區分VS版本的方法為 Condition 屬性,
直接將 Condition 屬性增加到 IncludePath 和 LibraryPath 下即可。
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup /> <PropertyGroup> <IncludePath>$(IncludePath);C:\opencv248\build\include</IncludePath> </PropertyGroup> <PropertyGroup> <LibraryPath Condition=" '$(VisualStudioVersion)' == '11.0'">$(LibraryPath);C:\opencv248\build\x86\vc11\lib</LibraryPath> <LibraryPath Condition=" '$(VisualStudioVersion)' == '12.0'">$(LibraryPath);C:\opencv248\build\x86\vc12\lib</LibraryPath> </PropertyGroup> <ItemDefinitionGroup /> <ItemGroup /> </Project>
VisualStudioVersion 10.0 為 VS 2010
VisualStudioVersion 11.0 為 VS 2012
VisualStudioVersion 12.0 為 VS 2013
2014年1月7日火曜日
[MFC] 對話框以 SendMessage 傳遞 struct 結構體
接著前一篇,在兩個對話框之間傳遞資料。
同樣使用 SendMessage 來傳遞,所以直接拿上一篇的程式碼做一點修改。
同樣假設有兩個對話框 Send_Dlg 和 Receive_Dlg。
Send_Dlg: Send_Dlg.h 和 Send_Dlg.cpp
Receive_Dlg: Receive_Dlg.h 和 Receive_Dlg.cpp
Send_Dlg.h
同樣使用 SendMessage 來傳遞,所以直接拿上一篇的程式碼做一點修改。
同樣假設有兩個對話框 Send_Dlg 和 Receive_Dlg。
Send_Dlg: Send_Dlg.h 和 Send_Dlg.cpp
Receive_Dlg: Receive_Dlg.h 和 Receive_Dlg.cpp
Send_Dlg.h
// 定義 訊息編號 #define WM_MYMESSAGE_USE_COSTOMIZE_MESSAGE (WM_USER + 2) struct DataStruct { int i; double d; CString m_string; CEdit m_edit; }; class Send_Dlg : public CDialogEx { public: Send_Dlg(CWnd* pParent = NULL); // 要傳遞的結構體 DataStruct dataStruct; // 傳遞訊息的 function afx_msg void sender(); }Send_Dlg.cpp
#include "Send_Dlg.h" Send_Dlg::Send_Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(Send_Dlg::IDD) { m_Icon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void Send_Dlg::sender() { // struct 的值 dataStruct.i = 1; dataStruct.d = 1.0; dataStruct.m_string = L""; dataStruct.m_edit = ""; // 尋找對話框名稱為 Receive_Dlg 的對話框 CWnd* pWnd = CWnd::FindWindowW(NULL, L"Receive_Dlg"); // 傳送訊息 pWnd->SendMessageW(WM_MYMESSAGE_USE_COSTOMIZE_MESSAGE, (WPARAM)&dataStruct); }Receive_Dlg.h
#include "Send_Dlg.h" class Receive_Dlg : public CDialogEx { Receive_Dlg(CWnd* pParent = NULL); // 接收訊息用的 Function afx_msg LRESULT receiver(WPARAM wParam, LPARAM lParam); }Receive_Dlg.cpp
#include "Receive_Dlg.h" Receive_Dlg::Receive_Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(Receive_Dlg::IDD) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } // 在 MESSAGE MAP 中加入關聯 BEGIN_MESSAGE_MAP(Receive_Dlg, CDialogEx) // 以 ON_MESSAGE 將 訊息ID 和 receiver 串起來 ON_MESSAGE(WM_MYMESSAGE_USE_COSTOMIZE_MESSAGE, &Receive_Dlg::receiver) END_MESSAGE_MAP() LRESULT Receive_Dlg::receiver(WPARAM wParam, LPARAM lParam) { // 接受到訊息後的工作 // do something // 接收傳過來的結構體 DataStruct* pDs; pDs = (DataStruct*)wParam; // 取值 pDs->i; pDs->d; pDs->m_string; pDs->m_edit; AfxMessageBox("接收到訊息"); return LRESULT(); }
[MFC] 對話框傳訊息 SendMessage
雖然MFC已經很古老了...
不過用於簡單的程式倒是挺方便的。
在兩個對話框中傳遞訊息的方式: SendMessage、PostMessage。
SendMessage: 在訊息傳送之後,等待接收反應才返回。
PostMessage: 在訊息傳送之後,不等待即立刻返回。
假設有兩個對話框。一個叫 Send_Dlg,一個叫 Receive_Dlg。
Send_Dlg: Send_Dlg.h 和 Send_Dlg.cpp
Receive_Dlg: Receive_Dlg.h 和 Receive_Dlg.cpp
Send_Dlg.h
參考:
MFC的SendMessage函数详解
http://blog.csdn.net/nupt123456789/article/details/7370463
MESSAGE_HANDLER [メッセージの送受信]
http://bcb.client.jp/tips/022_receive_postmessage.html
不過用於簡單的程式倒是挺方便的。
在兩個對話框中傳遞訊息的方式: SendMessage、PostMessage。
SendMessage: 在訊息傳送之後,等待接收反應才返回。
PostMessage: 在訊息傳送之後,不等待即立刻返回。
假設有兩個對話框。一個叫 Send_Dlg,一個叫 Receive_Dlg。
Send_Dlg: Send_Dlg.h 和 Send_Dlg.cpp
Receive_Dlg: Receive_Dlg.h 和 Receive_Dlg.cpp
Send_Dlg.h
// 定義 訊息編號 #define WM_MYMESSAGE (WM_USER + 1) class Send_Dlg : public CDialogEx { public: Send_Dlg(CWnd* pParent = NULL); // 傳遞訊息的 function afx_msg void sender(); }Send_Dlg.cpp
#include "Send_Dlg.h" Send_Dlg::Send_Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(Send_Dlg::IDD) { m_Icon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void Send_Dlg::sender() { // 尋找對話框名稱為 Receive_Dlg 的對話框 CWnd* pWnd = CWnd::FindWindowW(NULL, L"Receive_Dlg"); // 傳送訊息 pWnd->SendMessageW(WM_MYMESSAGE); }Receive_Dlg.h
#include "Send_Dlg.h" class Receive_Dlg : public CDialogEx { Receive_Dlg(CWnd* pParent = NULL); // 接收訊息用的 Function afx_msg LRESULT receiver(WPARAM wParam, LPARAM lParam); }Receive_Dlg.cpp
#include "Receive_Dlg.h" Receive_Dlg::Receive_Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(Receive_Dlg::IDD) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } // 在 MESSAGE MAP 中加入關聯 BEGIN_MESSAGE_MAP(Receive_Dlg, CDialogEx) // 以 ON_MESSAGE 將 訊息ID 和 receiver 串起來 ON_MESSAGE(WM_MYMESSAGE, &Receive_Dlg::receiver) END_MESSAGE_MAP() LRESULT Receive_Dlg::receiver(WPARAM wParam, LPARAM lParam) { // 接受到訊息後的工作 // do something AfxMessageBox("接收到訊息"); return LRESULT(); }
參考:
MFC的SendMessage函数详解
http://blog.csdn.net/nupt123456789/article/details/7370463
MESSAGE_HANDLER [メッセージの送受信]
http://bcb.client.jp/tips/022_receive_postmessage.html
登録:
投稿 (Atom)