锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
璋ㄤ互姝ゅ浘BS鑷繁鐨勬噿鎯拌涓猴紒鍛靛懙錛?鏈堜喚鐨勬兂娉曞埌鐜板湪鎵嶅畬鎴愩傝繕濂芥病鏈夋嫋鍒?7騫村幓^_^銆?br />鍏堟妸鍥劇墖鍜屼唬鐮佺粰鍑猴紝鏄庡ぉ鍐嶆妸鏂囧瓧琛ヤ笂銆?br />
//
聽鍦╒C7.1鍜孌ev聽C++涓嬬紪璇戦氳繃
#include聽
<
windows.h
>
#include聽
<
cstring
>
#include聽
<
complex
>
#include聽
<
iostream
>
#include聽
<
fstream
>
using
聽
namespace
聽std;
//
璁劇疆榪唬嬈℃暟銆傘傘?/span>
const
聽unsigned聽
int
聽MAX聽
=
聽聽
100
;
//
璁劇疆鍥劇墖鍍忕礌錛岄粯璁ゅ彇鍥劇墖澶у皬涓郝?00脳600
void
聽setPixel(LPBYTE聽lpBits,聽unsigned聽
int
聽x,聽unsigned聽
int
聽y,聽BYTE聽r,聽BYTE聽g,聽BYTE聽b)
{
聽聽聽聽lpBits聽
+=
聽y
*
800
*
3
聽
+
聽x
*
3
;
聽聽聽聽
*
lpBits聽聽聽聽聽聽聽聽
=
聽b;
聽聽聽聽
*
(lpBits
+
1
)聽
=
聽g;
聽聽聽聽
*
(lpBits
+
2
)聽
=
聽r;
聽聽聽聽
return
;
}
//
鎸囧畾鏌撹壊瑙勫垯
template
<
typename聽T
>
inline聽T聽fun(T聽k)
{
聽聽聽聽
return
聽(k
*
41
)
%
255
;
}
int
聽main(
int
聽argc,聽
char
聽
*
argv[])
{
聽
//
聽嫻嬭瘯complex
聽
//
聽聽聽complex<double>聽c1(4.3,聽3.0);
聽
//
聽聽聽complex<double>聽c2=c1;
聽
//
聽聽聽
聽
//
聽聽聽for(int聽j=0;聽j<聽4800;聽j++){聽聽聽聽
聽
//
聽聽聽聽聽聽聽for(int聽i=0;聽i<100;聽i++){
聽
//
聽聽聽聽聽聽聽聽聽聽聽c2聽=聽(c1*2.0+1.0/(c1*c1))/3.0;
聽
//
聽聽聽聽聽聽聽聽聽聽聽if(c2==c1)聽break;
聽
//
聽聽聽聽聽聽聽聽聽聽聽c1=c2;
聽
//
聽聽聽聽聽聽聽}
聽
//
聽聽聽聽聽聽聽聽聽聽c1=complex<double>(4.3,聽3.0);
聽
//
聽聽聽}
聽
//
聽聽聽聽聽聽cout聽<<聽j聽<<聽endl;
聽聽聽聽BITMAPFILEHEADER聽聽hdr;
聽聽聽聽BITMAPINFOHEADER聽聽bih;
聽聽聽聽LPBYTE聽聽lpBits;
聽聽聽聽ZeroMemory(
&
hdr,聽
sizeof
(hdr));
聽聽聽聽ZeroMemory(
&
bih,聽
sizeof
(bih));
聽聽聽聽bih.biSize聽聽聽聽
=
聽聽聽聽
sizeof
(bih);
聽聽聽聽bih.biWidth聽聽聽聽
=
聽聽聽聽
800
;
聽聽聽聽bih.biHeight
=
聽聽聽聽
600
;
聽聽聽聽bih.biPlanes
=
聽聽聽
1
;
聽聽聽聽bih.biCompression聽
=
聽BI_RGB;
聽聽聽聽bih.biBitCount聽聽聽聽
=
聽
24
;
聽聽聽聽bih.biSizeImage聽
=
聽
0
;聽
聽聽聽聽hdr.bfType聽
=
聽
0x4d42
;
聽聽聽聽hdr.bfSize聽
=
聽(DWORD)聽(
sizeof
(BITMAPFILEHEADER)聽
+
聽
聽聽聽聽聽聽聽聽bih.biSize聽
+
聽
800
*
600
*
3
);
聽聽聽聽hdr.bfOffBits聽
=
聽(DWORD)(
sizeof
(BITMAPFILEHEADER)聽
+
聽
聽聽聽聽聽聽聽聽bih.biSize);
聽聽聽聽lpBits聽
=
聽
new
聽unsigned聽
char
[
800
*
600
*
3
];
聽聽聽聽memset(lpBits,聽
0
,聽
800
*
600
*
3
);
聽聽聽聽
//
嫻嬭瘯鍥劇墖鍐欏叆
聽聽聽聽
//
for(int聽j=0;聽j<聽600/2;聽j++)
聽聽聽聽
//
{
聽聽聽聽
//
聽聽聽聽for聽(int聽i=0;聽i<800;聽i++)
聽聽聽聽
//
聽聽聽聽{
聽聽聽聽
//
聽聽聽聽聽聽聽聽setPixel(lpBits,聽i,聽j,聽250,聽0,聽0);
聽聽聽聽
//
聽聽聽聽}
聽聽聽聽
//
}
聽聽聽聽complex
<
double
>
聽c2,c1;
聽聽聽聽
int
聽i,j,聽k;
聽聽聽聽
for
(j
=
0
;聽j
<
600
;聽j
++
)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
for
(i
=
0
;聽i
<
800
;聽i
++
)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽c1聽
=
聽complex
<
double
>
(i
*
0.01
-
4
,聽j
*
0.01
-
3
);
聽聽聽聽聽聽聽聽聽聽聽聽
//
榪唬涓偣
聽聽聽聽聽聽聽聽聽聽聽聽
for
(k
=
0
;聽k
<
MAX;聽k
++
)
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽c2聽
=
聽(c1
*
2.0
+
1.0
/
(c1
*
c1))
/
3.0
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
if
(c2
==
c1)聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽c1
=
c2;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽
if
(k
==
MAX)
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽setPixel(lpBits,聽i,聽j,聽
0
,聽
0
,聽
0
);
聽聽聽聽聽聽聽聽聽聽聽聽}
else
聽
if
(聽c1.real()聽
<
聽
0
聽
&&
聽c1.imag()聽
>
聽
0
)
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽setPixel(lpBits,聽i,聽j,聽fun(k),聽
0
,聽
0
);
聽聽聽聽聽聽聽聽聽聽聽聽}
else
聽
if
(聽c1.real()聽
<
聽
0
聽
&&
聽c1.imag()聽
<
聽
0
)
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽setPixel(lpBits,聽i,聽j,聽
0
,聽fun(k),聽
0
);
聽聽聽聽聽聽聽聽聽聽聽聽}
else
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽setPixel(lpBits,聽i,聽j,聽
0
,聽
0
,聽fun(k));
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽
//
鍐欏叆鏂囦歡
聽聽聽聽ofstream聽聽file(
"
fenxing.bmp
"
);
聽聽聽聽
char
*
聽pTmp聽
=
聽reinterpret_cast
<
char
*>
(
&
hdr);
聽聽聽聽file.write(pTmp,聽
sizeof
(BITMAPFILEHEADER));
聽聽聽聽pTmp聽
=
聽reinterpret_cast
<
char
*>
(
&
bih);
聽聽聽聽file.write(pTmp,聽
sizeof
(BITMAPINFOHEADER));
聽聽聽聽file.write(reinterpret_cast
<
char
*>
(lpBits),聽
800
*
600
*
3
);
聽聽聽聽delete聽[]lpBits;

聽聽聽聽
return
聽EXIT_SUCCESS;
}
typedef聽struct聽_matrix2D聽matrix2D;聽//涓涓粨鏋勪綋綾誨瀷matrix2D
BOOL聽initMatrix(matrix2D*聽pm,聽int聽h,聽int聽w);聽//鍒濆鍖杙m涓篽脳w鐨勯浂鐭╅樀
void聽delMatrix(matrix2D*聽pm);聽聽//鐭╅樀鐨勫唴閮ㄦ暟鎹┖闂村叏閮ㄦ槸鍔ㄦ佸垎閰嶇殑錛屾墍浠ラ鍑轟箣鍓嶄竴瀹氳鍒犻櫎鐭╅樀
int聽getData(matrix2D*聽pm,聽int聽x,聽int聽y);聽聽//榪斿洖鐭╅樀pm錛屽潗鏍囦負(fù)x銆亂鐨勫厓绱犲?/span>
void聽setData(matrix2D*聽pm,聽int聽x,int聽y,聽int聽data);聽聽聽//灝嗙煩闃祊m錛屽潗鏍囦負(fù)x銆亂鐨勫厓绱犲肩疆涓篸ata
void聽setMatrix(matrix2D*聽lhs,聽matrix2D*聽rhs);聽聽//鍒犻櫎鐭╅樀lhs鍘熷厛鐨勫鹼紝騫舵繁灞傛嫹璐濅負(fù)rhs
matrix2D聽addMatrix(matrix2D*聽lhs,聽matrix2D*聽rhs);聽聽//鐭╅樀鐩稿姞錛岃繑鍥炰竴涓柊鐨勭煩闃?/span>
matrix2D聽mulMatrix(matrix2D*聽lhs,聽matrix2D*聽rhs);聽聽//鐭╅樀鐩鎬箻錛岃繑鍥炰竴涓柊鐨勭煩闃?/span>
void聽printMatrix(matrix2D*聽pm);聽聽//鏍煎紡鍖栨墦鍗扮煩闃祊m
#include聽"matrix2d.h"
int聽main()

{
聽聽聽聽int聽i,j;
聽聽聽聽matrix2D聽聽rhs;
聽聽聽聽matrix2D聽聽lhs;
聽聽聽聽matrix2D聽聽result;
聽聽聽聽initMatrix(&lhs,聽11,聽10);
聽聽聽聽initMatrix(&rhs,聽10,聽2);
聽聽聽聽聽聽聽聽//lhs鐭╅樀璁劇疆鍏冪礌鍊?/span>
聽聽聽聽for(i聽=聽0;聽i<11;聽i++)
{
聽聽聽聽聽聽聽聽for(j聽=聽0;聽j<10;聽j++)
{
聽聽聽聽聽聽聽聽聽聽聽聽setData(&lhs,聽i,聽j,聽1);
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽聽聽聽聽//rhs鐭╅樀璁劇疆鍏冪礌鍊?/span>
聽聽聽聽for(i聽=聽0;聽i<10;聽i++)
{
聽聽聽聽聽聽聽聽for(j聽=聽0;聽j<2;聽j++)
{
聽聽聽聽聽聽聽聽聽聽聽聽setData(&rhs,聽i,聽j,聽i+1);
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽聽聽聽聽//鐭╅樀鐩鎬箻
聽聽聽聽result聽=聽mulMatrix(&lhs,聽&rhs);
聽聽聽聽聽聽聽聽//鎵撳嵃涓変釜鐭╅樀
聽聽聽聽printMatrix(&lhs);
聽聽聽聽printMatrix(&rhs);
聽聽聽聽printMatrix(&result);
聽聽聽聽聽聽聽聽//涓嶇敤浜嗭紝璁板緱閲婃斁鐭╅樀絀洪棿..
聽聽聽聽delMatrix(&lhs);
聽聽聽聽delMatrix(&rhs);
聽聽聽聽delMatrix(&result);
}
琛ㄧず涓涓妭鐐癸紝瀹冨彲浠ユ槸涓涓暟瀛楋紝鎴栬呬竴涓〃杈懼紡錛坧Exp榪欓噷鎴戜嬌鐢ㄧ殑鏄?a >boost搴?/a>鐨勬櫤鑳芥寚閽坰hared_ptr錛屾墍浠ョ紪璇戠殑璇濓紝闇瑕佸厛瀹夎boost搴擄級銆?br />榪愯鐨勭粨鏋滃鍥撅細(xì)
*杈撳叆鏃訛紝浠?e'琛ㄧず杈撳叆緇撴潫銆?br />瀹屾暣鐨勪唬鐮佸拰鍙墽琛屾枃浠剁偣鍑?a class="" title="" href="/Files/nj-blog/porland.rar" target="">榪欓噷涓嬭澆銆傛潈褰撴姏鐮栧紩鐜変簡錛屽笇鏈涙湁鏇村ソ綆楁硶鐨勫悓瀛﹁祼鏁欍?br />

榪欐槸鑷猈indows 1.0鏃朵唬浠ユ潵澶勭悊Windows娑堟伅浣跨敤鏈澶氱殑錛岀‘瀹炲湴錛屽畠宸ヤ綔銆備絾鏄棶棰樻槸褰撲綘寮濮嬪悜浣犵▼搴忎腑鍔犲叆鏇村澶嶆潅鐨勭壒鎬э紝渚嬪 MDI錛孫LE錛岄氱敤鎺т歡錛岀瓑絳夛紝浣犱細(xì)鑾峰緱涓涓鏁頒互鍗冭鐨勭獥鍙e嚱鏁般備綘寮濮嬪弽澶嶄嬌鐢≒ageDn鍜孭ageUp閿煩璺冿紝鏉ュ鎵句綘闇瑕佷慨鏀圭殑娑堟伅銆?br />LRESULT聽CALLBACK聽MainWndProc聽(HWND聽hwnd,聽UINT聽msg,聽聽聽WPARAM聽wParam,聽LPARAM聽lParam)
{
聽聽switch(msg)
聽聽{
聽聽聽聽case聽WM_COMMAND:
聽聽聽聽//聽
聽聽聽聽break;聽聽聽聽
聽聽聽聽聽
聽聽聽聽case聽WM_KEYUP:
聽聽聽聽//聽
聽聽聽聽break;
聽聽聽聽case聽WM_CLOSE:
聽聽聽聽//聽
聽聽聽聽break;聽聽聽聽聽聽聽
聽聽聽聽聽
聽聽聽聽case聽WM_DESTROY:
聽聽聽聽//
聽聽聽聽break;聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
聽聽聽聽default:聽聽聽
聽聽聽聽聽聽聽return聽DefWindowProc(hwnd,聽msg,聽wParam,聽lParam);
聽聽}
}
void myWnd_OnCommand (HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
濂戒簡錛岃繖浜涘垎嫻佸櫒鍙傛暟涔熷悓鏍瘋鐢ㄤ簬forwarding瀹?-鍥犳錛屽浣犳墍鏈熸湜鐨勶紝鎴戜滑涔嬪墠璋冪敤SendMessage鍑芥暟鏃跺睍鐜扮殑娣蜂貢鍙互鍑忓皯浜嗭細(xì)蹇熸祻瑙堟秷鎭垎嫻佸櫒Wizard鐗規(guī)?br />FORWARD_WM_COMMAND (hwndParent, IDC_USERCTL,榪欑鏂瑰紡闈炲父綆渚匡紝騫朵笖鍙互涓烘墍鏈夋秷鎭垎嫻佸櫒Wizard鏀寔鐨勬秷鎭伐浣溿?br />
GetDlgItem(hwnd, ID_USERCTL), BN_DBLCLK, SendMessage);
浣跨敤娑堟伅鍒嗘祦Wizard宸ュ叿
褰撲綘榪愯娑堟伅鍒嗘祦鍣╓izard鏃訛紝浣犲彲浠ョ湅鍒頒笅闈㈢殑紿楀彛錛?br />
Wizard鍦ㄥ乏涓婅鐨勫垪琛ㄦ閲屼負(fù)浣犳彁渚涗簡WINDOWS.H閲屾湁鐨勬秷鎭鐞嗭紝浣犲彲浠ョ偣鍑諱竴涓垨鑰呭涓秷鎭備綘鍙互鍦ㄧ獥鍙D緙栬緫妗嗛噷鎸囧畾涓涓獥鍙f爣璇嗭紝浠ユ寚瀹氫綘瑕佸彂閫佹秷鎭殑
紿楀彛銆傞氱敤鐨処D鏈?MainWnd 錛孉bout (鍏充簬瀵硅瘽妗嗭級錛岀瓑絳夈傝繖涓爣璇嗕細(xì)浣撶幇鍦ㄦ秷鎭鐞嗗嚱鏁頒腑錛屽拰 HANDLE_MSG 瀹忎腑錛屽鏋滀綘鍒氬垰寮濮嬬紪鍐欎唬鐮侊紝瀹冭繕鍙互浣撶幇鍦ㄧ獥
鍙?瀵硅瘽妗嗗鐞嗗嚱鏁頒腑銆傗?Make Window Procedure鈥濋夊畾妗嗙殑浣滅敤鏄細(xì)鍏佽浣犻氳繃閫夊畾鐨勬秷鎭垎嫻佸櫒鐨勫畯鏉ョ敓鎴愪竴涓獥鍙?瀵硅瘽妗嗗嚱鏁扮殑妗嗘灦銆備互榪欑鏂瑰紡鏉ュ紑濮嬩竴
涓猈indows API欏圭洰錛屼綘鍙互娓呮櫚鐨勭紪鍐欏拰緇勭粐浣犵殑浠g爜錛屽綋鐒惰繕鏈夛紝閬垮厤閿欒銆傚湪紿楀彛涓嬮潰鐨勪袱涓紪杈戞浼?xì)鍖呭惈鍒唻箒鍣ㄧ殑瀹忓拰澶勭悊鎵閫夋秷鎭殑鍑芥暟錛堝彧鏄師鍨嬶級鐢熸垚鐨勪唬
鐮併傝娉ㄦ剰鐨勬槸錛屽綋浣犻夋嫨鈥?span style="FONT-WEIGHT: bold">Make Window Procedure鈥濇椂紿楀彛澶勭悊鍑芥暟鐨勬ā鏉夸唬鐮佷笉鍑虹幇鍦ㄨ繖閲岋細(xì)瀹冧粎浣撶幇鍦ㄤ綘鐐瑰嚮浜嗏?span style="FONT-WEIGHT: bold">Copy Macro鈥濇椂澶嶅埗鍒頒綘鐨凜++緙栬緫鍣ㄤ腑
鐨勪唬鐮侀噷銆?br />
璁╂垜浠氳繃渚嬪瓙鏉ュ揩閫熺殑嫻忚娑堟伅鍒嗘祦鍣╓izard宸ュ叿鐨勭壒鎬с傝浣忎綘蹇呴』鍏堥氳繃#include <windowsx.h>灝嗗ご鏂囦歡<windowsx.h>鍖呭惈鍒頒綘.C/.CPP鏂囦歡涓?br />




<boost/checked_delete.hpp> 瀹氫箟浜嗕袱涓嚱鏁版ā鏉?/span> checked_delete 鍜?/span> checked_array_delete 錛?/span> 榪樻湁涓や釜綾繪ā鏉?/span> checked_deleter 鍜?/span> checked_array_deleter銆?/span>
褰撴垜浠埄鐢ㄦ寚閽堝垹闄や竴涓璞$殑鏃跺欙紝瀵硅薄綾誨瀷鏄惁瀹屾暣鍐沖畾浜嗗璞℃槸鍚﹁兘澶熻姝g‘鍒犻櫎銆備絾鏄紝濡傛灉浣犵敤
delete
鍘誨垹闄や竴涓被鍨嬪茍涓嶅畬鏁寸殑瀵硅薄鐨勬寚閽堬紝緙栬瘧鍣ㄥ茍涓嶄細(xì)緇欎綘鎻愪緵浠諱綍閿欒淇℃伅錛堝ソ鍚э紝鏈変簺緙栬瘧鍣ㄤ細(xì)緇欏嚭璀﹀憡淇℃伅錛屼絾鏄▼搴忓憳閫氬父浼?xì)蹇界暐璀﹀憡淇℃伅锛夊Q屼絾鏄繖鏍峰仛鐨勭粨鏋滃嵈鏄璞$殑鏋愭瀯鍑芥暟鏍規(guī)湰灝辨病鏈夎璋冪敤銆?/span>
鎵浠ワ紝鎴戜滑搴斿綋浣跨敤鏇翠弗鍘夌殑鎵嬫紱佹榪欑浜嬫儏鐨勫彂鐢熴傛瘮濡傝浣跨敤
checked_delete
浠f浛
delete
鏉ュ垹闄ゆ寚閽堛傚綋鎸囬拡鎵鎸囧悜鐨勬槸涓涓笉瀹屽叏綾誨瀷鏃訛紝
checked_delete
浼?xì)鋴删~栬瘧鍣ㄥ彂鍑洪敊璇俊鎭?/span>
checked_array_delete 鏄敤鏉ュ搴斾簬 delete [ ] operator 錛?/span> checked_deleter 鍜?/span> checked_array_deleter 鏄彲浠ラ厤鎺ョ殑浠垮嚱鏁扮増鏈?/span>
3.
鍑芥暟妯℃澘
next()
鍜?/span>
prior()
鍖呮嫭
鍑芥暟妯℃澘瀵逛紶鍏ョ殑鎸囬拡錛屾櫤鑳芥寚閽堟垨鏄凱浠e櫒鍋氶掑鎴栭掑噺錛屽茍浼犲洖瀹冦傜敤娉曞涓嬶細(xì)
浜嬪疄涓婏紝 T next(T x) 鍜?/span> T prior(T x) 灝嗗垎鍒皟鐢?/span> operator++ 鍜?/span> operator-- 錛岃?/span> T next(T x, Distance n) 鍜?/span> T prior(T x, Distance n) 鍒欒皟鐢?/span> std::distance(T x, size_t n) 銆?
4.noncopyable 綾?/span>
濡傛灉浣犻渶瑕佽璁′竴涓笉鍙互琚鍒剁殑綾伙紝閭d箞浣犲氨瑕佹槑紜湴灝嗗畠鐨勬嫹璐濇瀯閫犲嚱鏁板拰
operator = ()
鏀懼埌
private
澹版槑涓嬮潰銆?/span>
Boos\utility
鍑嗗浜嗕竴涓熀綾?/span>
noncopyable
錛屼綘鍙渶瑕佽浣犵殑綾葷戶鎵胯嚜
noncopyable
灝卞彲浠ヨ幏寰楄繖涓ц川銆傚浣犵殑綾繪潵璇磋繖涔熸槸涓涓樉寮忕殑澹版槑錛氣滄垜鏄笉鍙互琚鍒剁殑錛佲?/span>
鐢ㄦ硶錛?/span>
5
錛庡嚱鏁版ā鏉?/span>
addressof()
鍑芥暟妯℃澘榪斿洖涓涓璞$殑鐪熷疄鍦板潃錛堝綋鐒惰繖鏄氦緇欐寚閽堜簡錛夛細(xì)
棣栧厛鏄?/span> 聽 Base-from-Member 錛?/span>
鏈夋椂浣犲彲鑳介渶瑕佷緷璧栨垚鍛樺彉閲忔潵鍒濆鍖栧熀綾伙紝鍍忚繖鏍鳳細(xì)
浣嗘槸錛岃繖閲?/span> fdostream 鐨勬瀯閫犲嚱鏁扮殑鍒濆鍖栨槸閿欒鐨勶紝鍥犱負(fù) c++ 璇硶瑕佹眰鍩虹被鐨勫垵濮嬪寲瑕佸厛浜庢垚鍛樺彉閲忕殑鍒濆鍖栥?/span> Base-from-Member 鎻愪緵鐨勮В鍐充箣閬撳涓嬶細(xì)