From 8c263eaccb0b9c5b14ea9ac932b86c8f52da6546 Mon Sep 17 00:00:00 2001 From: Apress Date: Fri, 7 Oct 2016 00:22:28 +0100 Subject: [PATCH] First commit --- 2554.pdf | Bin 0 -> 198640 bytes 2555.pdf | Bin 0 -> 1582895 bytes 2744.html | 1 + 9781590596401.jpg | Bin 0 -> 10518 bytes Chapter02/Arrays.cpp | 76 + Chapter02/Boolean.cpp | 15 + Chapter02/BooleanLiteral.cpp | 15 + Chapter02/Boxing.cpp | 32 + Chapter02/BuildAll.bat | 18 + Chapter02/CharLiteral.cpp | 21 + Chapter02/Chars.cpp | 12 + Chapter02/Decimal.cpp | 39 + Chapter02/Enums.cpp | 26 + Chapter02/FloatingPoint.cpp | 15 + Chapter02/Hello.cpp | 7 + Chapter02/IntegerLiteral.cpp | 15 + Chapter02/IntegerTypes.cpp | 18 + Chapter02/MainArgsNew.cpp | 14 + Chapter02/MainArgsTrad.cpp | 12 + Chapter02/ReferenceIndirect.cpp | 38 + Chapter02/StringFun.cpp | 29 + Chapter02/StringLiteral.cpp | 11 + Chapter02/ValueClass.cpp | 39 + Chapter03/AbstractEx.cpp | 57 + Chapter03/ArrayProp.cpp | 36 + Chapter03/BuildAll.bat | 17 + Chapter03/Casting.cpp | 33 + Chapter03/Constructors.cpp | 53 + Chapter03/DefIndexProps.cpp | 37 + Chapter03/IndexProps.cpp | 65 + Chapter03/Inherit.cpp | 34 + Chapter03/InterfaceEx.cpp | 75 + Chapter03/MethodEx.cpp | 40 + Chapter03/NestedClass.cpp | 74 + Chapter03/OperatorOverload.cpp | 76 + Chapter03/OperatorOverloadMixed.cpp | 38 + Chapter03/ScalarProp.cpp | 81 + Chapter03/StackReferences.cpp | 23 + Chapter03/StaticMethodEx.cpp | 17 + Chapter03/StaticProp.cpp | 26 + Chapter03/VirtualAnimals.cpp | 83 + Chapter04/BuildAll.bat | 18 + Chapter04/Cards/BuildAll.bat | 1 + Chapter04/Cards/Card.cpp | 58 + Chapter04/Cards/Card.h | 26 + Chapter04/Cards/Deck.h | 14 + Chapter04/CatchAll.cpp | 45 + Chapter04/CatchException.cpp | 20 + Chapter04/Defined.cpp | 17 + Chapter04/Delegates.cpp | 69 + Chapter04/Events.cpp | 87 + Chapter04/Finally.cpp | 33 + Chapter04/Generics.cpp | 49 + Chapter04/MultiException.cpp | 59 + Chapter04/PlayCards/BuildAll.bat | 2 + Chapter04/PlayCards/Card.cpp | 58 + Chapter04/PlayCards/Card.h | 26 + Chapter04/PlayCards/Deck.cpp | 44 + Chapter04/PlayCards/Deck.h | 14 + Chapter04/PlayCards/PlayCards.cpp | 27 + Chapter04/RethrowException.cpp | 25 + Chapter04/Templates.cpp | 116 ++ Chapter04/ThrowDerived.cpp | 39 + Chapter06/AllTags/AllTags.cpp | 2 + Chapter06/AllTags/AllTags.h | 155 ++ Chapter06/AllTags/AllTags.vcproj | 218 +++ Chapter06/AllTags/document.xml | 20 + Chapter06/Chapter06.sln | 54 + Chapter06/Chapter06.suo | Bin 0 -> 21504 bytes Chapter06/Documentation.chm | Bin 0 -> 26504 bytes .../SimpleTripleSlash/SimpleTripleSlash.cpp | 4 + .../SimpleTripleSlash/SimpleTripleSlash.h | 25 + .../SimpleTripleSlash.vcproj | 211 +++ Chapter06/ViewSimple/AssemblyInfo.cpp | 61 + Chapter06/ViewSimple/ViewSimple.cpp | 14 + Chapter06/ViewSimple/ViewSimple.vcproj | 201 +++ Chapter06/ViewSimple/resource.h | 3 + Chapter06/ViewSimple/stdafx.cpp | 7 + Chapter06/ViewSimple/stdafx.h | 10 + Chapter07/DictionaryGeneric.cpp | 113 ++ Chapter07/HashSortList.cpp | 80 + Chapter07/IEnum_foreach.cpp | 26 + Chapter07/LinkedListGeneric.cpp | 44 + Chapter07/ListDict.cpp | 35 + Chapter07/ListGeneric.cpp | 75 + Chapter07/NameValue.cpp | 58 + Chapter07/QueueStack.cpp | 32 + Chapter07/QueueStackGeneric.cpp | 36 + Chapter07/StringColl.cpp | 32 + Chapter07/StringDict.cpp | 27 + Chapter07/arraylist.cpp | 41 + Chapter07/bitarray.cpp | 52 + Chapter07/buildall.bat | 13 + Chapter08/BinFormSerial.cpp | 96 ++ Chapter08/BinaryRW.cpp | 89 + Chapter08/DirInfo.cpp | 75 + Chapter08/FileInfo.cpp | 50 + Chapter08/FileStream.cpp | 50 + Chapter08/MemoryStream.cpp | 38 + Chapter08/SoapFormSerial.cpp | 98 ++ Chapter08/StreamRW.cpp | 30 + Chapter08/buildall.bat | 8 + Chapter09/ArrayOfRadios/ArrayOfRadios.cpp | 18 + Chapter09/ArrayOfRadios/ArrayOfRadios.vcproj | 250 +++ Chapter09/ArrayOfRadios/AssemblyInfo.cpp | 40 + Chapter09/ArrayOfRadios/Form1.h | 86 + Chapter09/ArrayOfRadios/Form1.resx | 120 ++ Chapter09/ArrayOfRadios/stdafx.cpp | 7 + Chapter09/ArrayOfRadios/stdafx.h | 6 + Chapter09/Chapter09.sln | 104 ++ Chapter09/Chapter09.suo | Bin 0 -> 25600 bytes Chapter09/CheckMe/AssemblyInfo.cpp | 40 + Chapter09/CheckMe/CheckMe.cpp | 18 + Chapter09/CheckMe/CheckMe.vcproj | 250 +++ Chapter09/CheckMe/Form1.h | 138 ++ Chapter09/CheckMe/Form1.resx | 120 ++ Chapter09/CheckMe/stdafx.cpp | 7 + Chapter09/CheckMe/stdafx.h | 6 + Chapter09/CustomHello/AssemblyInfo.cpp | 40 + Chapter09/CustomHello/CustomHello.cpp | 18 + Chapter09/CustomHello/CustomHello.vcproj | 250 +++ Chapter09/CustomHello/Form1.h | 56 + Chapter09/CustomHello/Form1.resx | 120 ++ Chapter09/CustomHello/stdafx.cpp | 7 + Chapter09/CustomHello/stdafx.h | 6 + Chapter09/GroupingRadios/AssemblyInfo.cpp | 40 + Chapter09/GroupingRadios/Form1.h | 135 ++ Chapter09/GroupingRadios/Form1.resx | 120 ++ Chapter09/GroupingRadios/GroupingRadios.cpp | 18 + .../GroupingRadios/GroupingRadios.vcproj | 250 +++ Chapter09/GroupingRadios/stdafx.cpp | 7 + Chapter09/GroupingRadios/stdafx.h | 6 + Chapter09/Hello/AssemblyInfo.cpp | 40 + Chapter09/Hello/Form1.h | 71 + Chapter09/Hello/Form1.resx | 120 ++ Chapter09/Hello/Hello.cpp | 18 + Chapter09/Hello/Hello.vcproj | 250 +++ Chapter09/Hello/stdafx.cpp | 7 + Chapter09/Hello/stdafx.h | 6 + Chapter09/ListTransfers/AssemblyInfo.cpp | 40 + Chapter09/ListTransfers/Form1.h | 187 ++ Chapter09/ListTransfers/Form1.resx | 120 ++ Chapter09/ListTransfers/ListTransfers.cpp | 18 + Chapter09/ListTransfers/ListTransfers.vcproj | 250 +++ Chapter09/ListTransfers/stdafx.cpp | 7 + Chapter09/ListTransfers/stdafx.h | 6 + Chapter09/MightyLabel/AssemblyInfo.cpp | 40 + Chapter09/MightyLabel/Form1.h | 83 + Chapter09/MightyLabel/Form1.resx | 120 ++ Chapter09/MightyLabel/MightyLabel.cpp | 18 + Chapter09/MightyLabel/MightyLabel.vcproj | 250 +++ Chapter09/MightyLabel/stdafx.cpp | 7 + Chapter09/MightyLabel/stdafx.h | 6 + Chapter09/MinuteTimer/AssemblyInfo.cpp | 40 + Chapter09/MinuteTimer/Form1.h | 103 ++ Chapter09/MinuteTimer/Form1.resx | 123 ++ Chapter09/MinuteTimer/MinuteTimer.cpp | 18 + Chapter09/MinuteTimer/MinuteTimer.vcproj | 250 +++ Chapter09/MinuteTimer/stdafx.cpp | 7 + Chapter09/MinuteTimer/stdafx.h | 6 + Chapter09/MouseJump/AssemblyInfo.cpp | 40 + Chapter09/MouseJump/Form1.h | 92 + Chapter09/MouseJump/Form1.resx | 120 ++ Chapter09/MouseJump/MouseJump.cpp | 18 + Chapter09/MouseJump/MouseJump.vcproj | 250 +++ Chapter09/MouseJump/stdafx.cpp | 7 + Chapter09/MouseJump/stdafx.h | 6 + Chapter09/Panels/AssemblyInfo.cpp | 40 + Chapter09/Panels/Form1.h | 142 ++ Chapter09/Panels/Form1.resx | 120 ++ Chapter09/Panels/Panels.cpp | 18 + Chapter09/Panels/Panels.vcproj | 250 +++ Chapter09/Panels/stdafx.cpp | 7 + Chapter09/Panels/stdafx.h | 6 + Chapter09/RichText/AssemblyInfo.cpp | 40 + Chapter09/RichText/Chapter01.rtf | Bin 0 -> 5406 bytes Chapter09/RichText/Form1.h | 169 ++ Chapter09/RichText/Form1.resx | 120 ++ Chapter09/RichText/RichText.cpp | 18 + Chapter09/RichText/RichText.vcproj | 254 +++ Chapter09/RichText/stdafx.cpp | 7 + Chapter09/RichText/stdafx.h | 6 + Chapter09/SplitCLB/AssemblyInfo.cpp | 40 + Chapter09/SplitCLB/Form1.h | 149 ++ Chapter09/SplitCLB/Form1.resx | 120 ++ Chapter09/SplitCLB/SplitCLB.cpp | 18 + Chapter09/SplitCLB/SplitCLB.vcproj | 250 +++ Chapter09/SplitCLB/stdafx.cpp | 7 + Chapter09/SplitCLB/stdafx.h | 6 + Chapter09/SyncCombos/AssemblyInfo.cpp | 40 + Chapter09/SyncCombos/Form1.h | 136 ++ Chapter09/SyncCombos/Form1.resx | 120 ++ Chapter09/SyncCombos/SyncCombos.cpp | 18 + Chapter09/SyncCombos/SyncCombos.vcproj | 250 +++ Chapter09/SyncCombos/stdafx.cpp | 7 + Chapter09/SyncCombos/stdafx.h | 6 + Chapter09/TextEntry/AssemblyInfo.cpp | 40 + Chapter09/TextEntry/Form1.h | 238 +++ Chapter09/TextEntry/Form1.resx | 120 ++ Chapter09/TextEntry/TextEntry.cpp | 18 + Chapter09/TextEntry/TextEntry.vcproj | 250 +++ Chapter09/TextEntry/stdafx.cpp | 7 + Chapter09/TextEntry/stdafx.h | 6 + Chapter09/TooManyButtons/AssemblyInfo.cpp | 40 + Chapter09/TooManyButtons/Form1.h | 81 + Chapter09/TooManyButtons/Form1.resx | 120 ++ Chapter09/TooManyButtons/TooManyButtons.cpp | 18 + .../TooManyButtons/TooManyButtons.vcproj | 250 +++ Chapter09/TooManyButtons/stdafx.cpp | 7 + Chapter09/TooManyButtons/stdafx.h | 6 + Chapter10/Chapter10.sln | 92 + Chapter10/Chapter10.suo | Bin 0 -> 24576 bytes Chapter10/ColorDialogEx/AssemblyInfo.cpp | 35 + Chapter10/ColorDialogEx/ColorDialogEx.cpp | 16 + Chapter10/ColorDialogEx/ColorDialogEx.vcproj | 254 +++ Chapter10/ColorDialogEx/Form1.h | 66 + Chapter10/ColorDialogEx/Form1.resx | 110 ++ Chapter10/ColorDialogEx/resource.h | 3 + Chapter10/ColorDialogEx/stdafx.cpp | 7 + Chapter10/ColorDialogEx/stdafx.h | 6 + Chapter10/CustomDialog/AssemblyInfo.cpp | 35 + Chapter10/CustomDialog/CustomDialog.cpp | 16 + Chapter10/CustomDialog/CustomDialog.vcproj | 263 +++ Chapter10/CustomDialog/Form1.h | 93 + Chapter10/CustomDialog/Form1.resx | 110 ++ Chapter10/CustomDialog/MyDialog.h | 110 ++ Chapter10/CustomDialog/myDialog.cpp | 3 + Chapter10/CustomDialog/resource.h | 3 + Chapter10/CustomDialog/stdafx.cpp | 7 + Chapter10/CustomDialog/stdafx.h | 6 + Chapter10/ErrorProviderEx/AssemblyInfo.cpp | 35 + Chapter10/ErrorProviderEx/ErrorProviderEx.cpp | 16 + .../ErrorProviderEx/ErrorProviderEx.vcproj | 254 +++ Chapter10/ErrorProviderEx/Form1.h | 165 ++ Chapter10/ErrorProviderEx/Form1.resx | 123 ++ Chapter10/ErrorProviderEx/resource.h | 3 + Chapter10/ErrorProviderEx/stdafx.cpp | 7 + Chapter10/ErrorProviderEx/stdafx.h | 6 + Chapter10/ListViewEx/AssemblyInfo.cpp | 63 + Chapter10/ListViewEx/Form1.h | 265 +++ Chapter10/ListViewEx/Form1.resx | 245 +++ Chapter10/ListViewEx/Images/apple.ico | Bin 0 -> 2238 bytes Chapter10/ListViewEx/Images/banana.ico | Bin 0 -> 2238 bytes Chapter10/ListViewEx/Images/orange.ico | Bin 0 -> 2238 bytes Chapter10/ListViewEx/ListViewEx.cpp | 16 + Chapter10/ListViewEx/ListViewEx.vcproj | 256 +++ Chapter10/ListViewEx/resource.h | 3 + Chapter10/ListViewEx/stdafx.cpp | 7 + Chapter10/ListViewEx/stdafx.h | 6 + Chapter10/MonthCalendarEx/AssemblyInfo.cpp | 35 + Chapter10/MonthCalendarEx/Form1.h | 105 ++ Chapter10/MonthCalendarEx/Form1.resx | 110 ++ Chapter10/MonthCalendarEx/MonthCalendarEx.cpp | 16 + .../MonthCalendarEx/MonthCalendarEx.vcproj | 254 +++ Chapter10/MonthCalendarEx/resource.h | 3 + Chapter10/MonthCalendarEx/stdafx.cpp | 7 + Chapter10/MonthCalendarEx/stdafx.h | 6 + Chapter10/NotifyIconEx/AssemblyInfo.cpp | 35 + Chapter10/NotifyIconEx/Form1.h | 138 ++ Chapter10/NotifyIconEx/Form1.resx | 171 ++ Chapter10/NotifyIconEx/Images/app.ico | Bin 0 -> 1078 bytes Chapter10/NotifyIconEx/NotifyIconEx.cpp | 16 + Chapter10/NotifyIconEx/NotifyIconEx.vcproj | 254 +++ Chapter10/NotifyIconEx/resource.h | 3 + Chapter10/NotifyIconEx/stdafx.cpp | 7 + Chapter10/NotifyIconEx/stdafx.h | 6 + Chapter10/PictureBoxEx/AssemblyInfo.cpp | 35 + Chapter10/PictureBoxEx/Form1.h | 76 + Chapter10/PictureBoxEx/Form1.resx | 361 ++++ Chapter10/PictureBoxEx/Images/shainaOK.JPG | Bin 0 -> 14158 bytes Chapter10/PictureBoxEx/PictureBoxEx.cpp | 16 + Chapter10/PictureBoxEx/PictureBoxEx.vcproj | 254 +++ Chapter10/PictureBoxEx/resource.h | 3 + Chapter10/PictureBoxEx/stdafx.cpp | 7 + Chapter10/PictureBoxEx/stdafx.h | 6 + Chapter10/SimpleMenu/AssemblyInfo.cpp | 35 + Chapter10/SimpleMenu/Form1.h | 240 +++ Chapter10/SimpleMenu/Form1.resx | 133 ++ Chapter10/SimpleMenu/Images/happy.ico | Bin 0 -> 1078 bytes Chapter10/SimpleMenu/SimpleMenu.cpp | 16 + Chapter10/SimpleMenu/SimpleMenu.vcproj | 254 +++ Chapter10/SimpleMenu/resource.h | 3 + Chapter10/SimpleMenu/stdafx.cpp | 7 + Chapter10/SimpleMenu/stdafx.h | 6 + Chapter10/SplitContainerEx/AssemblyInfo.cpp | 63 + Chapter10/SplitContainerEx/Form1.h | 158 ++ Chapter10/SplitContainerEx/Form1.resx | 117 ++ .../SplitContainerEx/SplitContainerEx.cpp | 16 + .../SplitContainerEx/SplitContainerEx.vcproj | 256 +++ Chapter10/SplitContainerEx/resource.h | 3 + Chapter10/SplitContainerEx/stdafx.cpp | 7 + Chapter10/SplitContainerEx/stdafx.h | 6 + Chapter10/StatusStripEx/AssemblyInfo.cpp | 35 + Chapter10/StatusStripEx/Form1.h | 171 ++ Chapter10/StatusStripEx/Form1.resx | 123 ++ Chapter10/StatusStripEx/StatusStripEx.cpp | 16 + Chapter10/StatusStripEx/StatusStripEx.vcproj | 254 +++ Chapter10/StatusStripEx/resource.h | 3 + Chapter10/StatusStripEx/stdafx.cpp | 7 + Chapter10/StatusStripEx/stdafx.h | 6 + Chapter10/TabControlEx/AssemblyInfo.cpp | 63 + Chapter10/TabControlEx/Form1.h | 132 ++ Chapter10/TabControlEx/Form1.resx | 117 ++ Chapter10/TabControlEx/TabControlEx.cpp | 16 + Chapter10/TabControlEx/TabControlEx.vcproj | 256 +++ Chapter10/TabControlEx/resource.h | 3 + Chapter10/TabControlEx/stdafx.cpp | 7 + Chapter10/TabControlEx/stdafx.h | 6 + Chapter10/ToolStripEx/AssemblyInfo.cpp | 63 + Chapter10/ToolStripEx/Form1.h | 167 ++ Chapter10/ToolStripEx/Form1.resx | 142 ++ Chapter10/ToolStripEx/ToolStripEx.cpp | 16 + Chapter10/ToolStripEx/ToolStripEx.vcproj | 256 +++ Chapter10/ToolStripEx/resource.h | 3 + Chapter10/ToolStripEx/stdafx.cpp | 7 + Chapter10/ToolStripEx/stdafx.h | 6 + Chapter10/TreeViewEx/AssemblyInfo.cpp | 63 + Chapter10/TreeViewEx/Form1.h | 141 ++ Chapter10/TreeViewEx/Form1.resx | 167 ++ Chapter10/TreeViewEx/Images/CLSDFOLD.ICO | Bin 0 -> 1078 bytes Chapter10/TreeViewEx/Images/OPENFOLD.ICO | Bin 0 -> 1078 bytes Chapter10/TreeViewEx/TreeViewEx.cpp | 16 + Chapter10/TreeViewEx/TreeViewEx.vcproj | 256 +++ Chapter10/TreeViewEx/resource.h | 3 + Chapter10/TreeViewEx/stdafx.cpp | 7 + Chapter10/TreeViewEx/stdafx.h | 6 + Chapter11/Chapter11.sln | 134 ++ Chapter11/Chapter11.suo | Bin 0 -> 31744 bytes Chapter11/CorrectingCoords/AssemblyInfo.cpp | 35 + .../CorrectingCoords/CorrectingCoords.cpp | 16 + .../CorrectingCoords/CorrectingCoords.vcproj | 250 +++ Chapter11/CorrectingCoords/Form1.h | 75 + Chapter11/CorrectingCoords/Form1.resx | 110 ++ Chapter11/CorrectingCoords/stdafx.cpp | 7 + Chapter11/CorrectingCoords/stdafx.h | 6 + Chapter11/DisappearingCoords/AssemblyInfo.cpp | 35 + .../DisappearingCoords/DisappearingCoords.cpp | 16 + .../DisappearingCoords.vcproj | 250 +++ Chapter11/DisappearingCoords/Form1.h | 63 + Chapter11/DisappearingCoords/Form1.resx | 110 ++ Chapter11/DisappearingCoords/stdafx.cpp | 7 + Chapter11/DisappearingCoords/stdafx.h | 6 + Chapter11/DoubleBuffering/AssemblyInfo.cpp | 35 + Chapter11/DoubleBuffering/DoubleBuffering.cpp | 16 + .../DoubleBuffering/DoubleBuffering.vcproj | 250 +++ Chapter11/DoubleBuffering/Form1.h | 155 ++ Chapter11/DoubleBuffering/Form1.resx | 123 ++ Chapter11/DoubleBuffering/stdafx.cpp | 7 + Chapter11/DoubleBuffering/stdafx.h | 6 + Chapter11/DownwardStringRect/AssemblyInfo.cpp | 35 + .../DownwardStringRect/DownwardStringRect.cpp | 16 + .../DownwardStringRect.vcproj | 250 +++ Chapter11/DownwardStringRect/Form1.h | 68 + Chapter11/DownwardStringRect/Form1.resx | 110 ++ Chapter11/DownwardStringRect/stdafx.cpp | 7 + Chapter11/DownwardStringRect/stdafx.h | 6 + Chapter11/DrawImageEx/AssemblyInfo.cpp | 35 + Chapter11/DrawImageEx/DrawImageEx.cpp | 16 + Chapter11/DrawImageEx/DrawImageEx.vcproj | 250 +++ Chapter11/DrawImageEx/Form1.h | 57 + Chapter11/DrawImageEx/Form1.resx | 110 ++ Chapter11/DrawImageEx/Images/CLICppCover.gif | Bin 0 -> 6345 bytes Chapter11/DrawImageEx/stdafx.cpp | 7 + Chapter11/DrawImageEx/stdafx.h | 6 + Chapter11/DrawingLines/AssemblyInfo.cpp | 35 + Chapter11/DrawingLines/DrawingLines.cpp | 16 + Chapter11/DrawingLines/DrawingLines.vcproj | 250 +++ Chapter11/DrawingLines/Form1.h | 90 + Chapter11/DrawingLines/Form1.resx | 110 ++ Chapter11/DrawingLines/stdafx.cpp | 7 + Chapter11/DrawingLines/stdafx.h | 6 + Chapter11/FontsGalore/AssemblyInfo.cpp | 35 + Chapter11/FontsGalore/FontsGalore.cpp | 16 + Chapter11/FontsGalore/FontsGalore.vcproj | 250 +++ Chapter11/FontsGalore/Form1.h | 121 ++ Chapter11/FontsGalore/Form1.resx | 110 ++ Chapter11/FontsGalore/stdafx.cpp | 7 + Chapter11/FontsGalore/stdafx.h | 6 + Chapter11/HappyFace/AssemblyInfo.cpp | 35 + Chapter11/HappyFace/Form1.h | 80 + Chapter11/HappyFace/Form1.resx | 110 ++ Chapter11/HappyFace/HappyFace.cpp | 16 + Chapter11/HappyFace/HappyFace.vcproj | 250 +++ Chapter11/HappyFace/stdafx.cpp | 7 + Chapter11/HappyFace/stdafx.h | 6 + Chapter11/HelloGDI/AssemblyInfo.cpp | 35 + Chapter11/HelloGDI/Form1.h | 58 + Chapter11/HelloGDI/Form1.resx | 110 ++ Chapter11/HelloGDI/HelloGDI.cpp | 16 + Chapter11/HelloGDI/HelloGDI.vcproj | 250 +++ Chapter11/HelloGDI/resource.h | 3 + Chapter11/HelloGDI/stdafx.cpp | 7 + Chapter11/HelloGDI/stdafx.h | 6 + Chapter11/HelloGDI_OnPaint/AssemblyInfo.cpp | 35 + Chapter11/HelloGDI_OnPaint/Form1.h | 55 + Chapter11/HelloGDI_OnPaint/Form1.resX | 110 ++ .../HelloGDI_OnPaint/HelloGDI_OnPaint.cpp | 16 + .../HelloGDI_OnPaint/HelloGDI_OnPaint.vcproj | 250 +++ Chapter11/HelloGDI_OnPaint/stdafx.cpp | 7 + Chapter11/HelloGDI_OnPaint/stdafx.h | 6 + Chapter11/InterOrUnion/AssemblyInfo.cpp | 35 + Chapter11/InterOrUnion/Form1.h | 89 + Chapter11/InterOrUnion/Form1.resx | 110 ++ Chapter11/InterOrUnion/InterOrUnion.cpp | 16 + Chapter11/InterOrUnion/InterOrUnion.vcproj | 250 +++ Chapter11/InterOrUnion/stdafx.cpp | 7 + Chapter11/InterOrUnion/stdafx.h | 6 + Chapter11/NewUnitsOrigin/AssemblyInfo.cpp | 35 + Chapter11/NewUnitsOrigin/Form1.h | 65 + Chapter11/NewUnitsOrigin/Form1.resx | 110 ++ Chapter11/NewUnitsOrigin/NewUnitsOrigin.cpp | 16 + .../NewUnitsOrigin/NewUnitsOrigin.vcproj | 250 +++ Chapter11/NewUnitsOrigin/stdafx.cpp | 7 + Chapter11/NewUnitsOrigin/stdafx.h | 6 + Chapter11/OnPaintWhere/AssemblyInfo.cpp | 35 + Chapter11/OnPaintWhere/Form1.h | 68 + Chapter11/OnPaintWhere/Form1.resx | 110 ++ Chapter11/OnPaintWhere/OnPaintWhere.cpp | 16 + Chapter11/OnPaintWhere/OnPaintWhere.vcproj | 250 +++ Chapter11/OnPaintWhere/stdafx.cpp | 7 + Chapter11/OnPaintWhere/stdafx.h | 6 + Chapter11/OptimizedHappyFace/AssemblyInfo.cpp | 35 + Chapter11/OptimizedHappyFace/Form1.h | 100 ++ Chapter11/OptimizedHappyFace/Form1.resx | 110 ++ .../OptimizedHappyFace/OptimizedHappyFace.cpp | 16 + .../OptimizedHappyFace.vcproj | 250 +++ Chapter11/OptimizedHappyFace/stdafx.cpp | 7 + Chapter11/OptimizedHappyFace/stdafx.h | 6 + Chapter11/PrintHappyFace/AssemblyInfo.cpp | 35 + Chapter11/PrintHappyFace/Form1.h | 115 ++ Chapter11/PrintHappyFace/Form1.resx | 126 ++ Chapter11/PrintHappyFace/PrintHappyFace.cpp | 16 + .../PrintHappyFace/PrintHappyFace.vcproj | 250 +++ Chapter11/PrintHappyFace/stdafx.cpp | 7 + Chapter11/PrintHappyFace/stdafx.h | 6 + Chapter11/RegionEx/AssemblyInfo.cpp | 35 + Chapter11/RegionEx/Form1.h | 66 + Chapter11/RegionEx/Form1.resx | 110 ++ Chapter11/RegionEx/RegionEx.cpp | 16 + Chapter11/RegionEx/RegionEx.vcproj | 250 +++ Chapter11/RegionEx/stdafx.cpp | 7 + Chapter11/RegionEx/stdafx.h | 6 + Chapter11/ScrollingHappyFace/AssemblyInfo.cpp | 35 + Chapter11/ScrollingHappyFace/Form1.h | 83 + Chapter11/ScrollingHappyFace/Form1.resx | 110 ++ .../ScrollingHappyFace/ScrollingHappyFace.cpp | 16 + .../ScrollingHappyFace.vcproj | 250 +++ Chapter11/ScrollingHappyFace/stdafx.cpp | 7 + Chapter11/ScrollingHappyFace/stdafx.h | 6 + Chapter11/SingleBuffering/AssemblyInfo.cpp | 35 + Chapter11/SingleBuffering/Form1.h | 110 ++ Chapter11/SingleBuffering/Form1.resx | 123 ++ Chapter11/SingleBuffering/SingleBuffering.cpp | 16 + .../SingleBuffering/SingleBuffering.vcproj | 250 +++ Chapter11/SingleBuffering/stdafx.cpp | 7 + Chapter11/SingleBuffering/stdafx.h | 6 + Chapter11/StringRect/AssemblyInfo.cpp | 35 + Chapter11/StringRect/Form1.h | 62 + Chapter11/StringRect/Form1.resx | 110 ++ Chapter11/StringRect/StringRect.cpp | 16 + Chapter11/StringRect/StringRect.vcproj | 250 +++ Chapter11/StringRect/stdafx.cpp | 7 + Chapter11/StringRect/stdafx.h | 6 + Chapter11/TextureBrushEx/AssemblyInfo.cpp | 35 + Chapter11/TextureBrushEx/Form1.h | 68 + Chapter11/TextureBrushEx/Form1.resx | 110 ++ .../TextureBrushEx/Images/CLICppCover.gif | Bin 0 -> 6345 bytes Chapter11/TextureBrushEx/TextureBrushEx.cpp | 16 + .../TextureBrushEx/TextureBrushEx.vcproj | 250 +++ Chapter11/TextureBrushEx/stdafx.cpp | 7 + Chapter11/TextureBrushEx/stdafx.h | 6 + Chapter12/Chapter12.sln | 56 + Chapter12/Chapter12.suo | Bin 0 -> 30208 bytes Chapter12/ConnectedBasics/AssemblyInfo.cpp | 61 + Chapter12/ConnectedBasics/ConnectedBasics.cpp | 36 + .../ConnectedBasics/ConnectedBasics.vcproj | 203 +++ Chapter12/ConnectedModify/AssemblyInfo.cpp | 61 + Chapter12/ConnectedModify/ConnectedModify.cpp | 66 + .../ConnectedModify/ConnectedModify.vcproj | 203 +++ Chapter12/ConnectedQuery/AssemblyInfo.cpp | 61 + Chapter12/ConnectedQuery/ConnectedQuery.cpp | 87 + .../ConnectedQuery/ConnectedQuery.vcproj | 203 +++ Chapter12/ConnectedScalar/AssemblyInfo.cpp | 61 + Chapter12/ConnectedScalar/ConnectedScalar.cpp | 51 + .../ConnectedScalar/ConnectedScalar.vcproj | 203 +++ Chapter12/MaintAuthors/AssemblyInfo.cpp | 35 + Chapter12/MaintAuthors/Form1.h | 363 ++++ Chapter12/MaintAuthors/Form1.resx | 110 ++ Chapter12/MaintAuthors/MaintAuthors.cpp | 16 + Chapter12/MaintAuthors/MaintAuthors.vcproj | 250 +++ Chapter12/MaintAuthors/stdafx.cpp | 7 + Chapter12/MaintAuthors/stdafx.h | 6 + Chapter12/MaintAuthorsDGV/AssemblyInfo.cpp | 35 + Chapter12/MaintAuthorsDGV/AuthorsDS.h | 1020 +++++++++++ Chapter12/MaintAuthorsDGV/AuthorsDS.xsc | 10 + Chapter12/MaintAuthorsDGV/AuthorsDS.xsd | 113 ++ Chapter12/MaintAuthorsDGV/AuthorsDS.xss | 12 + Chapter12/MaintAuthorsDGV/Form1.h | 179 ++ Chapter12/MaintAuthorsDGV/Form1.resx | 129 ++ Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.cpp | 16 + .../MaintAuthorsDGV/MaintAuthorsDGV.vcproj | 266 +++ Chapter12/MaintAuthorsDGV/stdafx.cpp | 7 + Chapter12/MaintAuthorsDGV/stdafx.h | 8 + Chapter12/Transactions/AssemblyInfo.cpp | 61 + Chapter12/Transactions/Transactions.cpp | 86 + Chapter12/Transactions/Transactions.vcproj | 203 +++ Chapter13/ADONET/ADONET.cpp | 72 + Chapter13/ADONET/ADONET.vcproj | 199 +++ Chapter13/Chapter13.sln | 74 + Chapter13/Chapter13.suo | Bin 0 -> 30208 bytes Chapter13/ReadXML/Monsters.xml | 25 + Chapter13/ReadXML/ReadXML.cpp | 106 ++ Chapter13/ReadXML/ReadXML.vcproj | 203 +++ Chapter13/ReadXMLDOM/Monsters.xml | 25 + Chapter13/ReadXMLDOM/ReadXMLDOM.cpp | 53 + Chapter13/ReadXMLDOM/ReadXMLDOM.vcproj | 203 +++ Chapter13/ReadXPathNav/Monsters.xml | 25 + Chapter13/ReadXPathNav/ReadXPathNav.cpp | 51 + Chapter13/ReadXPathNav/ReadXPathNav.vcproj | 203 +++ Chapter13/UpdateXML/Monsters.xml | 25 + Chapter13/UpdateXML/New_Monsters.xml | 28 + Chapter13/UpdateXML/UpdateXML.cpp | 69 + Chapter13/UpdateXML/UpdateXML.vcproj | 207 +++ Chapter13/UpdateXMLDOM/Monsters.xml | 25 + Chapter13/UpdateXMLDOM/New_Monsters.xml | 25 + Chapter13/UpdateXMLDOM/UpdateXMLDOM.cpp | 42 + Chapter13/UpdateXMLDOM/UpdateXMLDOM.vcproj | 207 +++ Chapter13/ValidateXML/Monsters.dtd | 7 + Chapter13/ValidateXML/Monsters.h | 1533 +++++++++++++++++ Chapter13/ValidateXML/Monsters.xml | 12 + Chapter13/ValidateXML/Monsters.xsd | 32 + Chapter13/ValidateXML/Monsters.xsx | 10 + Chapter13/ValidateXML/ValidateXML.cpp | 50 + Chapter13/ValidateXML/ValidateXML.vcproj | 215 +++ Chapter13/WriteXML/Goblin.xml | 13 + Chapter13/WriteXML/WriteXML.cpp | 57 + Chapter13/WriteXML/WriteXML.vcproj | 203 +++ Chapter13/WriteXMLDOM/Monsters.xml | 25 + Chapter13/WriteXMLDOM/New_Monsters.xml | 30 + Chapter13/WriteXMLDOM/WriteXMLDOM.cpp | 58 + Chapter13/WriteXMLDOM/WriteXMLDOM.vcproj | 207 +++ Chapter13/XPathEx/Monsters.xml | 25 + Chapter13/XPathEx/XPathEx.cpp | 93 + Chapter13/XPathEx/XPathEx.vcproj | 203 +++ Chapter14/Chapter14.sln | 26 + Chapter14/Chapter14.suo | Bin 0 -> 13824 bytes Chapter14/Simple/AssemblyInfo.cpp | 35 + Chapter14/Simple/ProjectInstaller.cpp | 2 + Chapter14/Simple/ProjectInstaller.h | 70 + Chapter14/Simple/ProjectInstaller.resx | 132 ++ Chapter14/Simple/Simple.vcproj | 265 +++ Chapter14/Simple/SimpleWinService.cpp | 78 + Chapter14/Simple/SimpleWinService.h | 117 ++ Chapter14/Simple/SimpleWinService.resx | 126 ++ Chapter14/Simple/stdafx.cpp | 5 + Chapter14/Simple/stdafx.h | 7 + Chapter14/SimpleCtrl/AssemblyInfo.cpp | 35 + Chapter14/SimpleCtrl/Form1.h | 170 ++ Chapter14/SimpleCtrl/Form1.resx | 123 ++ Chapter14/SimpleCtrl/SimpleCtrl.cpp | 16 + Chapter14/SimpleCtrl/SimpleCtrl.vcproj | 254 +++ Chapter14/SimpleCtrl/stdafx.cpp | 7 + Chapter14/SimpleCtrl/stdafx.h | 6 + Chapter15/AuthorWS/AssemblyInfo.cpp | 35 + Chapter15/AuthorWS/AuthorWS.asmx | 2 + Chapter15/AuthorWS/AuthorWS.vcproj | 266 +++ Chapter15/AuthorWS/AuthorWSClass.cpp | 49 + Chapter15/AuthorWS/AuthorWSClass.h | 61 + Chapter15/AuthorWS/Global.asax | 1 + Chapter15/AuthorWS/Global.asax.h | 47 + Chapter15/AuthorWS/Web.config | 90 + Chapter15/AuthorWS/stdafx.cpp | 5 + Chapter15/AuthorWS/stdafx.h | 7 + Chapter15/Chapter15.sln | 38 + Chapter15/Chapter15.suo | Bin 0 -> 17408 bytes Chapter15/FindZipCode/AssemblyInfo.cpp | 35 + Chapter15/FindZipCode/FindZipCode.asmx | 2 + Chapter15/FindZipCode/FindZipCode.vcproj | 266 +++ Chapter15/FindZipCode/FindZipCodeClass.cpp | 21 + Chapter15/FindZipCode/FindZipCodeClass.h | 46 + Chapter15/FindZipCode/Global.asax | 1 + Chapter15/FindZipCode/Global.asax.h | 47 + Chapter15/FindZipCode/Web.config | 90 + Chapter15/FindZipCode/stdafx.cpp | 5 + Chapter15/FindZipCode/stdafx.h | 7 + Chapter15/MaintAuthors/AssemblyInfo.cpp | 35 + Chapter15/MaintAuthors/AuthorWS.h | 203 +++ .../MaintAuthors/AuthorWS/AuthorWS.disco | 6 + Chapter15/MaintAuthors/AuthorWS/AuthorWS.wsdl | 120 ++ .../MaintAuthors/AuthorWS/results.discomap | 7 + Chapter15/MaintAuthors/Form1.h | 306 ++++ Chapter15/MaintAuthors/Form1.resx | 110 ++ Chapter15/MaintAuthors/MaintAuthors.cpp | 16 + Chapter15/MaintAuthors/MaintAuthors.vcproj | 282 +++ .../MaintAuthors/MaintAuthors.vcproj.vspscc | 11 + Chapter15/MaintAuthors/stdafx.cpp | 7 + Chapter15/MaintAuthors/stdafx.h | 8 + Chapter15/MaintAuthors/webservice.h | 2 + .../ZipCodeConsoleClient/AssemblyInfo.cpp | 35 + Chapter15/ZipCodeConsoleClient/FindZipCode.h | 142 ++ .../FindZipCode/FindZipCode.disco | 6 + .../FindZipCode/FindZipCode.wsdl | 69 + .../FindZipCode/results.discomap | 7 + .../ZipCodeConsoleClient.cpp | 21 + .../ZipCodeConsoleClient.vcproj | 260 +++ .../ZipCodeConsoleClient.vcproj.vspscc | 11 + Chapter15/ZipCodeConsoleClient/resource.h | 3 + Chapter15/ZipCodeConsoleClient/stdafx.cpp | 7 + Chapter15/ZipCodeConsoleClient/stdafx.h | 10 + Chapter15/ZipCodeConsoleClient/webservice.h | 3 + Chapter16/AbortingThreads/AbortingThreads.cpp | 56 + .../AbortingThreads/AbortingThreads.vcproj | 197 +++ ...Threads.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/Chapter16.sln | 86 + Chapter16/Chapter16.suo | Bin 0 -> 27648 bytes Chapter16/ISRingThreads/ISRingThreads.cpp | 61 + Chapter16/ISRingThreads/ISRingThreads.vcproj | 197 +++ ...Threads.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/InterlockedVars/InterlockedVars.cpp | 41 + .../InterlockedVars/InterlockedVars.vcproj | 197 +++ ...kedVars.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/JoiningThreads/JoiningThreads.cpp | 32 + .../JoiningThreads/JoiningThreads.vcproj | 197 +++ ...Threads.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/MutexSpawn/MutexSpawn.cpp | 23 + Chapter16/MutexSpawn/MutexSpawn.vcproj | 197 +++ ...exSpawn.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/SleepingThreads/SleepingThreads.cpp | 41 + .../SleepingThreads/SleepingThreads.vcproj | 197 +++ ...Threads.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/StartingThreads/StartingThreads.cpp | 54 + .../StartingThreads/StartingThreads.vcproj | 197 +++ ...Threads.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/SyncByMonitor/SyncByMonitor.cpp | 75 + Chapter16/SyncByMonitor/SyncByMonitor.vcproj | 197 +++ ...Monitor.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/SyncByMutex/SyncByMutex.cpp | 43 + Chapter16/SyncByMutex/SyncByMutex.vcproj | 197 +++ ...ByMutex.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/SyncByRWLock/SyncByRWLock.cpp | 69 + Chapter16/SyncByRWLock/SyncByRWLock.vcproj | 197 +++ ...yRWLock.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter16/ThreadPooling/ThreadPooling.cpp | 31 + Chapter16/ThreadPooling/ThreadPooling.vcproj | 197 +++ ...Pooling.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../ThreadStaticVars/ThreadStaticVars.cpp | 61 + .../ThreadStaticVars/ThreadStaticVars.vcproj | 197 +++ ...ticVars.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../Async_TcpServer/Async_TcpServer.vcproj | 197 +++ ...pServer.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter17/Async_TcpServer/TcpServer_Async.cpp | 104 ++ Chapter17/Chapter17.sln | 104 ++ Chapter17/Chapter17.suo | Bin 0 -> 33280 bytes Chapter17/TcpClient/TcpClient.cpp | 47 + Chapter17/TcpClient/TcpClient.vcproj | 197 +++ ...pClient.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../TcpClient_Stream/TcpClient_Stream.cpp | 54 + .../TcpClient_Stream/TcpClient_Stream.vcproj | 197 +++ ..._Stream.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter17/TcpServer/TcpServer.cpp | 66 + Chapter17/TcpServer/TcpServer.vcproj | 197 +++ ...pServer.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../TcpServer_Listener/TcpServer_Listener.cpp | 60 + .../TcpServer_Listener.vcproj | 197 +++ ...istener.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../TcpServer_Stream/TcpServer_Stream.cpp | 67 + .../TcpServer_Stream/TcpServer_Stream.vcproj | 197 +++ ..._Stream.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter17/UDPConnect/UDPConnect.cpp | 30 + Chapter17/UDPConnect/UDPConnect.vcproj | 197 +++ ...Connect.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter17/UdpClient/UdpClient.cpp | 31 + Chapter17/UdpClient/UdpClient.vcproj | 197 +++ ...pClient.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../UdpClient_Helper/UdpClient_Helper.cpp | 29 + .../UdpClient_Helper/UdpClient_Helper.vcproj | 197 +++ ..._Helper.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../UdpClient_Timeout/UdpClient_Timeout.cpp | 43 + .../UdpClient_Timeout.vcproj | 197 +++ ...Timeout.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter17/UdpServer/UdpServer.cpp | 27 + Chapter17/UdpServer/UdpServer.vcproj | 197 +++ ...pServer.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../UdpServer_Helper/UdpServer_Helper.cpp | 27 + .../UdpServer_Helper/UdpServer_Helper.vcproj | 197 +++ ..._Helper.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter18/Chapter18.sln | 80 + Chapter18/Chapter18.suo | Bin 0 -> 24064 bytes Chapter18/DocTestLib/AssemblyInfo.cpp | 59 + Chapter18/DocTestLib/DocTestLib.cpp | 2 + Chapter18/DocTestLib/DocTestLib.h | 35 + Chapter18/DocTestLib/DocTestLib.vcproj | 217 +++ ...TestLib.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter18/Documentation/AssemblyInfo.cpp | 59 + Chapter18/Documentation/Documentation.cpp | 57 + Chapter18/Documentation/Documentation.h | 42 + Chapter18/Documentation/Documentation.vcproj | 213 +++ ...ntation.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../DocumentationWriter/AssemblyInfo.cpp | 40 + .../DocumentationWriter.cpp | 91 + .../DocumentationWriter.vcproj | 232 +++ ...nWriter.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter18/DocumentationWriter/stdafx.cpp | 7 + Chapter18/DocumentationWriter/stdafx.h | 8 + Chapter18/EmbeddingResources/Animal.resx | 54 + Chapter18/EmbeddingResources/AssemblyInfo.cpp | 59 + Chapter18/EmbeddingResources/Color.txt | 4 + .../EmbeddingResources/EmbeddingResources.cpp | 33 + .../EmbeddingResources.vcproj | 244 +++ ...sources.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter18/EmbeddingResources/fruit.resources | Bin 0 -> 309 bytes Chapter18/EmbeddingResources/fruit.txt | 4 + Chapter18/Invoking/AssemblyInfo.cpp | 40 + Chapter18/Invoking/Form1.h | 163 ++ Chapter18/Invoking/Form1.resx | 120 ++ Chapter18/Invoking/Invoking.cpp | 18 + Chapter18/Invoking/Invoking.vcproj | 250 +++ ...nvoking.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter18/Invoking/stdafx.cpp | 7 + Chapter18/Invoking/stdafx.h | 6 + Chapter18/MultiCultureApp/AssemblyInfo.cpp | 40 + Chapter18/MultiCultureApp/Form1.de-DE.resx | 136 ++ Chapter18/MultiCultureApp/Form1.fr-FR.resx | 133 ++ Chapter18/MultiCultureApp/Form1.h | 69 + Chapter18/MultiCultureApp/Form1.resx | 167 ++ Chapter18/MultiCultureApp/MultiCultureApp.cpp | 18 + .../MultiCultureApp/MultiCultureApp.vcproj | 260 +++ ...tureApp.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter18/MultiCultureApp/stdafx.cpp | 7 + Chapter18/MultiCultureApp/stdafx.h | 6 + .../MultiCultureConsole/Colors.fr-fr.resx | 54 + Chapter18/MultiCultureConsole/Colors.resx | 54 + .../MultiCultureConsole.cpp | 24 + .../MultiCultureConsole.vcproj | 227 +++ ...Console.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../MultiCultureDate/MultiCultureDate.cpp | 12 + .../MultiCultureDate/MultiCultureDate.vcproj | 197 +++ ...ureDate.vcproj.AMIDALA.Stephen Fraser.user | 65 + .../ReferenceSharedAssembly.cpp | 8 + .../ReferenceSharedAssembly.exe.config | 12 + .../ReferenceSharedAssembly.vcproj | 206 +++ ...ssembly.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter18/Reflecting/AssemblyInfo.cpp | 40 + Chapter18/Reflecting/Form1.h | 252 +++ Chapter18/Reflecting/Form1.resx | 120 ++ Chapter18/Reflecting/Reflecting.cpp | 18 + Chapter18/Reflecting/Reflecting.vcproj | 250 +++ ...lecting.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter18/Reflecting/stdafx.cpp | 7 + Chapter18/Reflecting/stdafx.h | 6 + Chapter18/SharedAssembly/AssemblyInfo.cpp | 57 + Chapter18/SharedAssembly/SharedAssembly.cpp | 2 + Chapter18/SharedAssembly/SharedAssembly.h | 20 + Chapter18/SharedAssembly/SharedAssembly.snk | Bin 0 -> 596 bytes .../SharedAssembly/SharedAssembly.vcproj | 213 +++ ...ssembly.vcproj.AMIDALA.Stephen Fraser.user | 65 + Chapter19/AssertDenyPermit/AssemblyInfo.cpp | 35 + .../AssertDenyPermit/AssertDenyPermit.cpp | 64 + .../AssertDenyPermit/AssertDenyPermit.vcproj | 250 +++ Chapter19/AssertDenyPermit/ReadMe.txt | 28 + Chapter19/AssertDenyPermit/app.ico | Bin 0 -> 1078 bytes Chapter19/AssertDenyPermit/app.rc | 63 + Chapter19/AssertDenyPermit/resource.h | 3 + Chapter19/AssertDenyPermit/stdafx.cpp | 7 + Chapter19/AssertDenyPermit/stdafx.h | 8 + Chapter19/CASSecurity/AssemblyInfo.cpp | 35 + Chapter19/CASSecurity/CASSecurity.cpp | 16 + Chapter19/CASSecurity/CASSecurity.vcproj | 272 +++ Chapter19/CASSecurity/Form1.h | 133 ++ Chapter19/CASSecurity/Form1.resx | 110 ++ Chapter19/CASSecurity/ReadMe.txt | 33 + Chapter19/CASSecurity/app.ico | Bin 0 -> 1078 bytes Chapter19/CASSecurity/app.rc | 63 + Chapter19/CASSecurity/resource.h | 3 + Chapter19/CASSecurity/stdafx.cpp | 7 + Chapter19/CASSecurity/stdafx.h | 6 + Chapter19/Chapter19.sln | 104 ++ Chapter19/Chapter19.suo | Bin 0 -> 24064 bytes Chapter19/PrincipalIdentity/AssemblyInfo.cpp | 35 + .../PrincipalIdentity/PrincipalIdentity.cpp | 59 + .../PrincipalIdentity.vcproj | 250 +++ Chapter19/PrincipalIdentity/ReadMe.txt | 28 + Chapter19/PrincipalIdentity/app.ico | Bin 0 -> 1078 bytes Chapter19/PrincipalIdentity/app.rc | 63 + Chapter19/PrincipalIdentity/resource.h | 3 + Chapter19/PrincipalIdentity/stdafx.cpp | 7 + Chapter19/PrincipalIdentity/stdafx.h | 8 + Chapter19/RemoveSecurity/AssemblyInfo.cpp | 61 + Chapter19/RemoveSecurity/ReadMe.txt | 28 + Chapter19/RemoveSecurity/RemoveSecurity.cpp | 35 + .../RemoveSecurity/RemoveSecurity.vcproj | 197 +++ Chapter19/RemoveSecurity/app.ico | Bin 0 -> 1078 bytes Chapter19/RemoveSecurity/app.rc | 52 + Chapter19/RemoveSecurity/resource.h | 3 + Chapter19/RemoveSecurity/stdafx.cpp | 7 + Chapter19/RemoveSecurity/stdafx.h | 10 + Chapter19/RoleBasedSecurity/AssemblyInfo.cpp | 35 + Chapter19/RoleBasedSecurity/ReadMe.txt | 28 + .../RoleBasedSecurity/RoleBasedSecurity.cpp | 67 + .../RoleBasedSecurity.vcproj | 250 +++ Chapter19/RoleBasedSecurity/app.ico | Bin 0 -> 1078 bytes Chapter19/RoleBasedSecurity/app.rc | 63 + Chapter19/RoleBasedSecurity/resource.h | 3 + Chapter19/RoleBasedSecurity/stdafx.cpp | 7 + Chapter19/RoleBasedSecurity/stdafx.h | 8 + Chapter19/SetSecurity/AssemblyInfo.cpp | 61 + Chapter19/SetSecurity/ReadMe.txt | 28 + Chapter19/SetSecurity/SetSecurity.cpp | 47 + Chapter19/SetSecurity/SetSecurity.vcproj | 197 +++ Chapter19/SetSecurity/app.ico | Bin 0 -> 1078 bytes Chapter19/SetSecurity/app.rc | 52 + Chapter19/SetSecurity/resource.h | 3 + Chapter19/SetSecurity/stdafx.cpp | 7 + Chapter19/SetSecurity/stdafx.h | 10 + Chapter20/Chapter20.sln | 68 + Chapter20/Chapter20.suo | Bin 0 -> 23040 bytes Chapter20/IntPtrArith/IntPtrArith.cpp | 18 + Chapter20/IntPtrArith/IntPtrArith.vcproj | 197 +++ Chapter20/IntPtrMoving/IntPtr.cpp | 26 + Chapter20/IntPtrMoving/IntPtrMoving.vcproj | 197 +++ Chapter20/MixManUnman/MixManUnman.cpp | 21 + Chapter20/MixManUnman/MixManUnman.vcproj | 197 +++ .../MixManUnmanClass/MixManUnmanClass.cpp | 105 ++ .../MixManUnmanClass/MixManUnmanClass.vcproj | 197 +++ .../MixManUnmanHello/MixManUnmanHello.cpp | 13 + .../MixManUnmanHello/MixManUnmanHello.vcproj | 197 +++ Chapter20/PinIntPtr/PinIntPtr.cpp | 32 + Chapter20/PinIntPtr/PinIntPtr.vcproj | 197 +++ Chapter20/PinPtr/PinPtr.cpp | 69 + Chapter20/PinPtr/PinPtr.vcproj | 197 +++ Chapter20/UMArray/UMArray.cpp | 12 + Chapter20/UMArray/UMArray.vcproj | 197 +++ Chapter20/VcclrEx/VcclrEx.cpp | 37 + Chapter20/VcclrEx/VcclrEx.vcproj | 197 +++ Chapter21/Chapter21.sln | 68 + Chapter21/Chapter21.suo | Bin 0 -> 28672 bytes Chapter21/ClassMarshal/AssemblyInfo.cpp | 35 + Chapter21/ClassMarshal/ClassMarshal.cpp | 53 + Chapter21/ClassMarshal/ClassMarshal.vcproj | 228 +++ Chapter21/ClassMarshal/stdafx.cpp | 7 + Chapter21/ClassMarshal/stdafx.h | 8 + Chapter21/DllOldWay/AssemblyInfo.cpp | 35 + Chapter21/DllOldWay/DllOldWay.cpp | 19 + Chapter21/DllOldWay/DllOldWay.vcproj | 228 +++ Chapter21/DllOldWay/stdafx.cpp | 7 + Chapter21/DllOldWay/stdafx.h | 8 + Chapter21/LateBindCOM/AssemblyInfo.cpp | 35 + Chapter21/LateBindCOM/LateBindCOM.cpp | 39 + Chapter21/LateBindCOM/LateBindCOM.vcproj | 228 +++ Chapter21/LateBindCOM/stdafx.cpp | 7 + Chapter21/LateBindCOM/stdafx.h | 8 + Chapter21/ManualCom/ManualCOM.cpp | 17 + Chapter21/ManualCom/ManualCom.vcproj | 202 +++ Chapter21/ManualCom/TestCom.dll | Bin 0 -> 3584 bytes Chapter21/NativeCode/NativeCode.cpp | 30 + Chapter21/NativeCode/NativeCode.vcproj | 215 +++ Chapter21/NativeCode/stdafx.cpp | 8 + Chapter21/NativeCode/stdafx.h | 32 + Chapter21/SimpleCOM/AssemblyInfo.cpp | 35 + .../SimpleCOM/Interop/Interop.TestCOM.1.0.dll | Bin 0 -> 3584 bytes Chapter21/SimpleCOM/SimpleCOM.cpp | 27 + Chapter21/SimpleCOM/SimpleCOM.vcproj | 233 +++ Chapter21/SimpleCOM/stdafx.cpp | 7 + Chapter21/SimpleCOM/stdafx.h | 8 + Chapter21/SimplePInvoke/AssemblyInfo.cpp | 35 + Chapter21/SimplePInvoke/SimplePInvoke.cpp | 37 + Chapter21/SimplePInvoke/SimplePInvoke.vcproj | 228 +++ Chapter21/SimplePInvoke/stdafx.cpp | 7 + Chapter21/SimplePInvoke/stdafx.h | 8 + .../StaticMethodPInvoke/AssemblyInfo.cpp | 35 + .../StaticMethodPInvoke.cpp | 28 + .../StaticMethodPInvoke.vcproj | 228 +++ Chapter21/StaticMethodPInvoke/stdafx.cpp | 7 + Chapter21/StaticMethodPInvoke/stdafx.h | 8 + Chapter21/TestCOM/TestCOM.cpp | 35 + Chapter21/TestCOM/TestCOM.vcproj | 196 +++ LICENSE.txt | 27 + README.md | 15 + ReadMe.txt | 26 + contributing.md | 14 + 880 files changed, 65947 insertions(+) create mode 100644 2554.pdf create mode 100644 2555.pdf create mode 100644 2744.html create mode 100644 9781590596401.jpg create mode 100644 Chapter02/Arrays.cpp create mode 100644 Chapter02/Boolean.cpp create mode 100644 Chapter02/BooleanLiteral.cpp create mode 100644 Chapter02/Boxing.cpp create mode 100644 Chapter02/BuildAll.bat create mode 100644 Chapter02/CharLiteral.cpp create mode 100644 Chapter02/Chars.cpp create mode 100644 Chapter02/Decimal.cpp create mode 100644 Chapter02/Enums.cpp create mode 100644 Chapter02/FloatingPoint.cpp create mode 100644 Chapter02/Hello.cpp create mode 100644 Chapter02/IntegerLiteral.cpp create mode 100644 Chapter02/IntegerTypes.cpp create mode 100644 Chapter02/MainArgsNew.cpp create mode 100644 Chapter02/MainArgsTrad.cpp create mode 100644 Chapter02/ReferenceIndirect.cpp create mode 100644 Chapter02/StringFun.cpp create mode 100644 Chapter02/StringLiteral.cpp create mode 100644 Chapter02/ValueClass.cpp create mode 100644 Chapter03/AbstractEx.cpp create mode 100644 Chapter03/ArrayProp.cpp create mode 100644 Chapter03/BuildAll.bat create mode 100644 Chapter03/Casting.cpp create mode 100644 Chapter03/Constructors.cpp create mode 100644 Chapter03/DefIndexProps.cpp create mode 100644 Chapter03/IndexProps.cpp create mode 100644 Chapter03/Inherit.cpp create mode 100644 Chapter03/InterfaceEx.cpp create mode 100644 Chapter03/MethodEx.cpp create mode 100644 Chapter03/NestedClass.cpp create mode 100644 Chapter03/OperatorOverload.cpp create mode 100644 Chapter03/OperatorOverloadMixed.cpp create mode 100644 Chapter03/ScalarProp.cpp create mode 100644 Chapter03/StackReferences.cpp create mode 100644 Chapter03/StaticMethodEx.cpp create mode 100644 Chapter03/StaticProp.cpp create mode 100644 Chapter03/VirtualAnimals.cpp create mode 100644 Chapter04/BuildAll.bat create mode 100644 Chapter04/Cards/BuildAll.bat create mode 100644 Chapter04/Cards/Card.cpp create mode 100644 Chapter04/Cards/Card.h create mode 100644 Chapter04/Cards/Deck.h create mode 100644 Chapter04/CatchAll.cpp create mode 100644 Chapter04/CatchException.cpp create mode 100644 Chapter04/Defined.cpp create mode 100644 Chapter04/Delegates.cpp create mode 100644 Chapter04/Events.cpp create mode 100644 Chapter04/Finally.cpp create mode 100644 Chapter04/Generics.cpp create mode 100644 Chapter04/MultiException.cpp create mode 100644 Chapter04/PlayCards/BuildAll.bat create mode 100644 Chapter04/PlayCards/Card.cpp create mode 100644 Chapter04/PlayCards/Card.h create mode 100644 Chapter04/PlayCards/Deck.cpp create mode 100644 Chapter04/PlayCards/Deck.h create mode 100644 Chapter04/PlayCards/PlayCards.cpp create mode 100644 Chapter04/RethrowException.cpp create mode 100644 Chapter04/Templates.cpp create mode 100644 Chapter04/ThrowDerived.cpp create mode 100644 Chapter06/AllTags/AllTags.cpp create mode 100644 Chapter06/AllTags/AllTags.h create mode 100644 Chapter06/AllTags/AllTags.vcproj create mode 100644 Chapter06/AllTags/document.xml create mode 100644 Chapter06/Chapter06.sln create mode 100644 Chapter06/Chapter06.suo create mode 100644 Chapter06/Documentation.chm create mode 100644 Chapter06/SimpleTripleSlash/SimpleTripleSlash.cpp create mode 100644 Chapter06/SimpleTripleSlash/SimpleTripleSlash.h create mode 100644 Chapter06/SimpleTripleSlash/SimpleTripleSlash.vcproj create mode 100644 Chapter06/ViewSimple/AssemblyInfo.cpp create mode 100644 Chapter06/ViewSimple/ViewSimple.cpp create mode 100644 Chapter06/ViewSimple/ViewSimple.vcproj create mode 100644 Chapter06/ViewSimple/resource.h create mode 100644 Chapter06/ViewSimple/stdafx.cpp create mode 100644 Chapter06/ViewSimple/stdafx.h create mode 100644 Chapter07/DictionaryGeneric.cpp create mode 100644 Chapter07/HashSortList.cpp create mode 100644 Chapter07/IEnum_foreach.cpp create mode 100644 Chapter07/LinkedListGeneric.cpp create mode 100644 Chapter07/ListDict.cpp create mode 100644 Chapter07/ListGeneric.cpp create mode 100644 Chapter07/NameValue.cpp create mode 100644 Chapter07/QueueStack.cpp create mode 100644 Chapter07/QueueStackGeneric.cpp create mode 100644 Chapter07/StringColl.cpp create mode 100644 Chapter07/StringDict.cpp create mode 100644 Chapter07/arraylist.cpp create mode 100644 Chapter07/bitarray.cpp create mode 100644 Chapter07/buildall.bat create mode 100644 Chapter08/BinFormSerial.cpp create mode 100644 Chapter08/BinaryRW.cpp create mode 100644 Chapter08/DirInfo.cpp create mode 100644 Chapter08/FileInfo.cpp create mode 100644 Chapter08/FileStream.cpp create mode 100644 Chapter08/MemoryStream.cpp create mode 100644 Chapter08/SoapFormSerial.cpp create mode 100644 Chapter08/StreamRW.cpp create mode 100644 Chapter08/buildall.bat create mode 100644 Chapter09/ArrayOfRadios/ArrayOfRadios.cpp create mode 100644 Chapter09/ArrayOfRadios/ArrayOfRadios.vcproj create mode 100644 Chapter09/ArrayOfRadios/AssemblyInfo.cpp create mode 100644 Chapter09/ArrayOfRadios/Form1.h create mode 100644 Chapter09/ArrayOfRadios/Form1.resx create mode 100644 Chapter09/ArrayOfRadios/stdafx.cpp create mode 100644 Chapter09/ArrayOfRadios/stdafx.h create mode 100644 Chapter09/Chapter09.sln create mode 100644 Chapter09/Chapter09.suo create mode 100644 Chapter09/CheckMe/AssemblyInfo.cpp create mode 100644 Chapter09/CheckMe/CheckMe.cpp create mode 100644 Chapter09/CheckMe/CheckMe.vcproj create mode 100644 Chapter09/CheckMe/Form1.h create mode 100644 Chapter09/CheckMe/Form1.resx create mode 100644 Chapter09/CheckMe/stdafx.cpp create mode 100644 Chapter09/CheckMe/stdafx.h create mode 100644 Chapter09/CustomHello/AssemblyInfo.cpp create mode 100644 Chapter09/CustomHello/CustomHello.cpp create mode 100644 Chapter09/CustomHello/CustomHello.vcproj create mode 100644 Chapter09/CustomHello/Form1.h create mode 100644 Chapter09/CustomHello/Form1.resx create mode 100644 Chapter09/CustomHello/stdafx.cpp create mode 100644 Chapter09/CustomHello/stdafx.h create mode 100644 Chapter09/GroupingRadios/AssemblyInfo.cpp create mode 100644 Chapter09/GroupingRadios/Form1.h create mode 100644 Chapter09/GroupingRadios/Form1.resx create mode 100644 Chapter09/GroupingRadios/GroupingRadios.cpp create mode 100644 Chapter09/GroupingRadios/GroupingRadios.vcproj create mode 100644 Chapter09/GroupingRadios/stdafx.cpp create mode 100644 Chapter09/GroupingRadios/stdafx.h create mode 100644 Chapter09/Hello/AssemblyInfo.cpp create mode 100644 Chapter09/Hello/Form1.h create mode 100644 Chapter09/Hello/Form1.resx create mode 100644 Chapter09/Hello/Hello.cpp create mode 100644 Chapter09/Hello/Hello.vcproj create mode 100644 Chapter09/Hello/stdafx.cpp create mode 100644 Chapter09/Hello/stdafx.h create mode 100644 Chapter09/ListTransfers/AssemblyInfo.cpp create mode 100644 Chapter09/ListTransfers/Form1.h create mode 100644 Chapter09/ListTransfers/Form1.resx create mode 100644 Chapter09/ListTransfers/ListTransfers.cpp create mode 100644 Chapter09/ListTransfers/ListTransfers.vcproj create mode 100644 Chapter09/ListTransfers/stdafx.cpp create mode 100644 Chapter09/ListTransfers/stdafx.h create mode 100644 Chapter09/MightyLabel/AssemblyInfo.cpp create mode 100644 Chapter09/MightyLabel/Form1.h create mode 100644 Chapter09/MightyLabel/Form1.resx create mode 100644 Chapter09/MightyLabel/MightyLabel.cpp create mode 100644 Chapter09/MightyLabel/MightyLabel.vcproj create mode 100644 Chapter09/MightyLabel/stdafx.cpp create mode 100644 Chapter09/MightyLabel/stdafx.h create mode 100644 Chapter09/MinuteTimer/AssemblyInfo.cpp create mode 100644 Chapter09/MinuteTimer/Form1.h create mode 100644 Chapter09/MinuteTimer/Form1.resx create mode 100644 Chapter09/MinuteTimer/MinuteTimer.cpp create mode 100644 Chapter09/MinuteTimer/MinuteTimer.vcproj create mode 100644 Chapter09/MinuteTimer/stdafx.cpp create mode 100644 Chapter09/MinuteTimer/stdafx.h create mode 100644 Chapter09/MouseJump/AssemblyInfo.cpp create mode 100644 Chapter09/MouseJump/Form1.h create mode 100644 Chapter09/MouseJump/Form1.resx create mode 100644 Chapter09/MouseJump/MouseJump.cpp create mode 100644 Chapter09/MouseJump/MouseJump.vcproj create mode 100644 Chapter09/MouseJump/stdafx.cpp create mode 100644 Chapter09/MouseJump/stdafx.h create mode 100644 Chapter09/Panels/AssemblyInfo.cpp create mode 100644 Chapter09/Panels/Form1.h create mode 100644 Chapter09/Panels/Form1.resx create mode 100644 Chapter09/Panels/Panels.cpp create mode 100644 Chapter09/Panels/Panels.vcproj create mode 100644 Chapter09/Panels/stdafx.cpp create mode 100644 Chapter09/Panels/stdafx.h create mode 100644 Chapter09/RichText/AssemblyInfo.cpp create mode 100644 Chapter09/RichText/Chapter01.rtf create mode 100644 Chapter09/RichText/Form1.h create mode 100644 Chapter09/RichText/Form1.resx create mode 100644 Chapter09/RichText/RichText.cpp create mode 100644 Chapter09/RichText/RichText.vcproj create mode 100644 Chapter09/RichText/stdafx.cpp create mode 100644 Chapter09/RichText/stdafx.h create mode 100644 Chapter09/SplitCLB/AssemblyInfo.cpp create mode 100644 Chapter09/SplitCLB/Form1.h create mode 100644 Chapter09/SplitCLB/Form1.resx create mode 100644 Chapter09/SplitCLB/SplitCLB.cpp create mode 100644 Chapter09/SplitCLB/SplitCLB.vcproj create mode 100644 Chapter09/SplitCLB/stdafx.cpp create mode 100644 Chapter09/SplitCLB/stdafx.h create mode 100644 Chapter09/SyncCombos/AssemblyInfo.cpp create mode 100644 Chapter09/SyncCombos/Form1.h create mode 100644 Chapter09/SyncCombos/Form1.resx create mode 100644 Chapter09/SyncCombos/SyncCombos.cpp create mode 100644 Chapter09/SyncCombos/SyncCombos.vcproj create mode 100644 Chapter09/SyncCombos/stdafx.cpp create mode 100644 Chapter09/SyncCombos/stdafx.h create mode 100644 Chapter09/TextEntry/AssemblyInfo.cpp create mode 100644 Chapter09/TextEntry/Form1.h create mode 100644 Chapter09/TextEntry/Form1.resx create mode 100644 Chapter09/TextEntry/TextEntry.cpp create mode 100644 Chapter09/TextEntry/TextEntry.vcproj create mode 100644 Chapter09/TextEntry/stdafx.cpp create mode 100644 Chapter09/TextEntry/stdafx.h create mode 100644 Chapter09/TooManyButtons/AssemblyInfo.cpp create mode 100644 Chapter09/TooManyButtons/Form1.h create mode 100644 Chapter09/TooManyButtons/Form1.resx create mode 100644 Chapter09/TooManyButtons/TooManyButtons.cpp create mode 100644 Chapter09/TooManyButtons/TooManyButtons.vcproj create mode 100644 Chapter09/TooManyButtons/stdafx.cpp create mode 100644 Chapter09/TooManyButtons/stdafx.h create mode 100644 Chapter10/Chapter10.sln create mode 100644 Chapter10/Chapter10.suo create mode 100644 Chapter10/ColorDialogEx/AssemblyInfo.cpp create mode 100644 Chapter10/ColorDialogEx/ColorDialogEx.cpp create mode 100644 Chapter10/ColorDialogEx/ColorDialogEx.vcproj create mode 100644 Chapter10/ColorDialogEx/Form1.h create mode 100644 Chapter10/ColorDialogEx/Form1.resx create mode 100644 Chapter10/ColorDialogEx/resource.h create mode 100644 Chapter10/ColorDialogEx/stdafx.cpp create mode 100644 Chapter10/ColorDialogEx/stdafx.h create mode 100644 Chapter10/CustomDialog/AssemblyInfo.cpp create mode 100644 Chapter10/CustomDialog/CustomDialog.cpp create mode 100644 Chapter10/CustomDialog/CustomDialog.vcproj create mode 100644 Chapter10/CustomDialog/Form1.h create mode 100644 Chapter10/CustomDialog/Form1.resx create mode 100644 Chapter10/CustomDialog/MyDialog.h create mode 100644 Chapter10/CustomDialog/myDialog.cpp create mode 100644 Chapter10/CustomDialog/resource.h create mode 100644 Chapter10/CustomDialog/stdafx.cpp create mode 100644 Chapter10/CustomDialog/stdafx.h create mode 100644 Chapter10/ErrorProviderEx/AssemblyInfo.cpp create mode 100644 Chapter10/ErrorProviderEx/ErrorProviderEx.cpp create mode 100644 Chapter10/ErrorProviderEx/ErrorProviderEx.vcproj create mode 100644 Chapter10/ErrorProviderEx/Form1.h create mode 100644 Chapter10/ErrorProviderEx/Form1.resx create mode 100644 Chapter10/ErrorProviderEx/resource.h create mode 100644 Chapter10/ErrorProviderEx/stdafx.cpp create mode 100644 Chapter10/ErrorProviderEx/stdafx.h create mode 100644 Chapter10/ListViewEx/AssemblyInfo.cpp create mode 100644 Chapter10/ListViewEx/Form1.h create mode 100644 Chapter10/ListViewEx/Form1.resx create mode 100644 Chapter10/ListViewEx/Images/apple.ico create mode 100644 Chapter10/ListViewEx/Images/banana.ico create mode 100644 Chapter10/ListViewEx/Images/orange.ico create mode 100644 Chapter10/ListViewEx/ListViewEx.cpp create mode 100644 Chapter10/ListViewEx/ListViewEx.vcproj create mode 100644 Chapter10/ListViewEx/resource.h create mode 100644 Chapter10/ListViewEx/stdafx.cpp create mode 100644 Chapter10/ListViewEx/stdafx.h create mode 100644 Chapter10/MonthCalendarEx/AssemblyInfo.cpp create mode 100644 Chapter10/MonthCalendarEx/Form1.h create mode 100644 Chapter10/MonthCalendarEx/Form1.resx create mode 100644 Chapter10/MonthCalendarEx/MonthCalendarEx.cpp create mode 100644 Chapter10/MonthCalendarEx/MonthCalendarEx.vcproj create mode 100644 Chapter10/MonthCalendarEx/resource.h create mode 100644 Chapter10/MonthCalendarEx/stdafx.cpp create mode 100644 Chapter10/MonthCalendarEx/stdafx.h create mode 100644 Chapter10/NotifyIconEx/AssemblyInfo.cpp create mode 100644 Chapter10/NotifyIconEx/Form1.h create mode 100644 Chapter10/NotifyIconEx/Form1.resx create mode 100644 Chapter10/NotifyIconEx/Images/app.ico create mode 100644 Chapter10/NotifyIconEx/NotifyIconEx.cpp create mode 100644 Chapter10/NotifyIconEx/NotifyIconEx.vcproj create mode 100644 Chapter10/NotifyIconEx/resource.h create mode 100644 Chapter10/NotifyIconEx/stdafx.cpp create mode 100644 Chapter10/NotifyIconEx/stdafx.h create mode 100644 Chapter10/PictureBoxEx/AssemblyInfo.cpp create mode 100644 Chapter10/PictureBoxEx/Form1.h create mode 100644 Chapter10/PictureBoxEx/Form1.resx create mode 100644 Chapter10/PictureBoxEx/Images/shainaOK.JPG create mode 100644 Chapter10/PictureBoxEx/PictureBoxEx.cpp create mode 100644 Chapter10/PictureBoxEx/PictureBoxEx.vcproj create mode 100644 Chapter10/PictureBoxEx/resource.h create mode 100644 Chapter10/PictureBoxEx/stdafx.cpp create mode 100644 Chapter10/PictureBoxEx/stdafx.h create mode 100644 Chapter10/SimpleMenu/AssemblyInfo.cpp create mode 100644 Chapter10/SimpleMenu/Form1.h create mode 100644 Chapter10/SimpleMenu/Form1.resx create mode 100644 Chapter10/SimpleMenu/Images/happy.ico create mode 100644 Chapter10/SimpleMenu/SimpleMenu.cpp create mode 100644 Chapter10/SimpleMenu/SimpleMenu.vcproj create mode 100644 Chapter10/SimpleMenu/resource.h create mode 100644 Chapter10/SimpleMenu/stdafx.cpp create mode 100644 Chapter10/SimpleMenu/stdafx.h create mode 100644 Chapter10/SplitContainerEx/AssemblyInfo.cpp create mode 100644 Chapter10/SplitContainerEx/Form1.h create mode 100644 Chapter10/SplitContainerEx/Form1.resx create mode 100644 Chapter10/SplitContainerEx/SplitContainerEx.cpp create mode 100644 Chapter10/SplitContainerEx/SplitContainerEx.vcproj create mode 100644 Chapter10/SplitContainerEx/resource.h create mode 100644 Chapter10/SplitContainerEx/stdafx.cpp create mode 100644 Chapter10/SplitContainerEx/stdafx.h create mode 100644 Chapter10/StatusStripEx/AssemblyInfo.cpp create mode 100644 Chapter10/StatusStripEx/Form1.h create mode 100644 Chapter10/StatusStripEx/Form1.resx create mode 100644 Chapter10/StatusStripEx/StatusStripEx.cpp create mode 100644 Chapter10/StatusStripEx/StatusStripEx.vcproj create mode 100644 Chapter10/StatusStripEx/resource.h create mode 100644 Chapter10/StatusStripEx/stdafx.cpp create mode 100644 Chapter10/StatusStripEx/stdafx.h create mode 100644 Chapter10/TabControlEx/AssemblyInfo.cpp create mode 100644 Chapter10/TabControlEx/Form1.h create mode 100644 Chapter10/TabControlEx/Form1.resx create mode 100644 Chapter10/TabControlEx/TabControlEx.cpp create mode 100644 Chapter10/TabControlEx/TabControlEx.vcproj create mode 100644 Chapter10/TabControlEx/resource.h create mode 100644 Chapter10/TabControlEx/stdafx.cpp create mode 100644 Chapter10/TabControlEx/stdafx.h create mode 100644 Chapter10/ToolStripEx/AssemblyInfo.cpp create mode 100644 Chapter10/ToolStripEx/Form1.h create mode 100644 Chapter10/ToolStripEx/Form1.resx create mode 100644 Chapter10/ToolStripEx/ToolStripEx.cpp create mode 100644 Chapter10/ToolStripEx/ToolStripEx.vcproj create mode 100644 Chapter10/ToolStripEx/resource.h create mode 100644 Chapter10/ToolStripEx/stdafx.cpp create mode 100644 Chapter10/ToolStripEx/stdafx.h create mode 100644 Chapter10/TreeViewEx/AssemblyInfo.cpp create mode 100644 Chapter10/TreeViewEx/Form1.h create mode 100644 Chapter10/TreeViewEx/Form1.resx create mode 100644 Chapter10/TreeViewEx/Images/CLSDFOLD.ICO create mode 100644 Chapter10/TreeViewEx/Images/OPENFOLD.ICO create mode 100644 Chapter10/TreeViewEx/TreeViewEx.cpp create mode 100644 Chapter10/TreeViewEx/TreeViewEx.vcproj create mode 100644 Chapter10/TreeViewEx/resource.h create mode 100644 Chapter10/TreeViewEx/stdafx.cpp create mode 100644 Chapter10/TreeViewEx/stdafx.h create mode 100644 Chapter11/Chapter11.sln create mode 100644 Chapter11/Chapter11.suo create mode 100644 Chapter11/CorrectingCoords/AssemblyInfo.cpp create mode 100644 Chapter11/CorrectingCoords/CorrectingCoords.cpp create mode 100644 Chapter11/CorrectingCoords/CorrectingCoords.vcproj create mode 100644 Chapter11/CorrectingCoords/Form1.h create mode 100644 Chapter11/CorrectingCoords/Form1.resx create mode 100644 Chapter11/CorrectingCoords/stdafx.cpp create mode 100644 Chapter11/CorrectingCoords/stdafx.h create mode 100644 Chapter11/DisappearingCoords/AssemblyInfo.cpp create mode 100644 Chapter11/DisappearingCoords/DisappearingCoords.cpp create mode 100644 Chapter11/DisappearingCoords/DisappearingCoords.vcproj create mode 100644 Chapter11/DisappearingCoords/Form1.h create mode 100644 Chapter11/DisappearingCoords/Form1.resx create mode 100644 Chapter11/DisappearingCoords/stdafx.cpp create mode 100644 Chapter11/DisappearingCoords/stdafx.h create mode 100644 Chapter11/DoubleBuffering/AssemblyInfo.cpp create mode 100644 Chapter11/DoubleBuffering/DoubleBuffering.cpp create mode 100644 Chapter11/DoubleBuffering/DoubleBuffering.vcproj create mode 100644 Chapter11/DoubleBuffering/Form1.h create mode 100644 Chapter11/DoubleBuffering/Form1.resx create mode 100644 Chapter11/DoubleBuffering/stdafx.cpp create mode 100644 Chapter11/DoubleBuffering/stdafx.h create mode 100644 Chapter11/DownwardStringRect/AssemblyInfo.cpp create mode 100644 Chapter11/DownwardStringRect/DownwardStringRect.cpp create mode 100644 Chapter11/DownwardStringRect/DownwardStringRect.vcproj create mode 100644 Chapter11/DownwardStringRect/Form1.h create mode 100644 Chapter11/DownwardStringRect/Form1.resx create mode 100644 Chapter11/DownwardStringRect/stdafx.cpp create mode 100644 Chapter11/DownwardStringRect/stdafx.h create mode 100644 Chapter11/DrawImageEx/AssemblyInfo.cpp create mode 100644 Chapter11/DrawImageEx/DrawImageEx.cpp create mode 100644 Chapter11/DrawImageEx/DrawImageEx.vcproj create mode 100644 Chapter11/DrawImageEx/Form1.h create mode 100644 Chapter11/DrawImageEx/Form1.resx create mode 100644 Chapter11/DrawImageEx/Images/CLICppCover.gif create mode 100644 Chapter11/DrawImageEx/stdafx.cpp create mode 100644 Chapter11/DrawImageEx/stdafx.h create mode 100644 Chapter11/DrawingLines/AssemblyInfo.cpp create mode 100644 Chapter11/DrawingLines/DrawingLines.cpp create mode 100644 Chapter11/DrawingLines/DrawingLines.vcproj create mode 100644 Chapter11/DrawingLines/Form1.h create mode 100644 Chapter11/DrawingLines/Form1.resx create mode 100644 Chapter11/DrawingLines/stdafx.cpp create mode 100644 Chapter11/DrawingLines/stdafx.h create mode 100644 Chapter11/FontsGalore/AssemblyInfo.cpp create mode 100644 Chapter11/FontsGalore/FontsGalore.cpp create mode 100644 Chapter11/FontsGalore/FontsGalore.vcproj create mode 100644 Chapter11/FontsGalore/Form1.h create mode 100644 Chapter11/FontsGalore/Form1.resx create mode 100644 Chapter11/FontsGalore/stdafx.cpp create mode 100644 Chapter11/FontsGalore/stdafx.h create mode 100644 Chapter11/HappyFace/AssemblyInfo.cpp create mode 100644 Chapter11/HappyFace/Form1.h create mode 100644 Chapter11/HappyFace/Form1.resx create mode 100644 Chapter11/HappyFace/HappyFace.cpp create mode 100644 Chapter11/HappyFace/HappyFace.vcproj create mode 100644 Chapter11/HappyFace/stdafx.cpp create mode 100644 Chapter11/HappyFace/stdafx.h create mode 100644 Chapter11/HelloGDI/AssemblyInfo.cpp create mode 100644 Chapter11/HelloGDI/Form1.h create mode 100644 Chapter11/HelloGDI/Form1.resx create mode 100644 Chapter11/HelloGDI/HelloGDI.cpp create mode 100644 Chapter11/HelloGDI/HelloGDI.vcproj create mode 100644 Chapter11/HelloGDI/resource.h create mode 100644 Chapter11/HelloGDI/stdafx.cpp create mode 100644 Chapter11/HelloGDI/stdafx.h create mode 100644 Chapter11/HelloGDI_OnPaint/AssemblyInfo.cpp create mode 100644 Chapter11/HelloGDI_OnPaint/Form1.h create mode 100644 Chapter11/HelloGDI_OnPaint/Form1.resX create mode 100644 Chapter11/HelloGDI_OnPaint/HelloGDI_OnPaint.cpp create mode 100644 Chapter11/HelloGDI_OnPaint/HelloGDI_OnPaint.vcproj create mode 100644 Chapter11/HelloGDI_OnPaint/stdafx.cpp create mode 100644 Chapter11/HelloGDI_OnPaint/stdafx.h create mode 100644 Chapter11/InterOrUnion/AssemblyInfo.cpp create mode 100644 Chapter11/InterOrUnion/Form1.h create mode 100644 Chapter11/InterOrUnion/Form1.resx create mode 100644 Chapter11/InterOrUnion/InterOrUnion.cpp create mode 100644 Chapter11/InterOrUnion/InterOrUnion.vcproj create mode 100644 Chapter11/InterOrUnion/stdafx.cpp create mode 100644 Chapter11/InterOrUnion/stdafx.h create mode 100644 Chapter11/NewUnitsOrigin/AssemblyInfo.cpp create mode 100644 Chapter11/NewUnitsOrigin/Form1.h create mode 100644 Chapter11/NewUnitsOrigin/Form1.resx create mode 100644 Chapter11/NewUnitsOrigin/NewUnitsOrigin.cpp create mode 100644 Chapter11/NewUnitsOrigin/NewUnitsOrigin.vcproj create mode 100644 Chapter11/NewUnitsOrigin/stdafx.cpp create mode 100644 Chapter11/NewUnitsOrigin/stdafx.h create mode 100644 Chapter11/OnPaintWhere/AssemblyInfo.cpp create mode 100644 Chapter11/OnPaintWhere/Form1.h create mode 100644 Chapter11/OnPaintWhere/Form1.resx create mode 100644 Chapter11/OnPaintWhere/OnPaintWhere.cpp create mode 100644 Chapter11/OnPaintWhere/OnPaintWhere.vcproj create mode 100644 Chapter11/OnPaintWhere/stdafx.cpp create mode 100644 Chapter11/OnPaintWhere/stdafx.h create mode 100644 Chapter11/OptimizedHappyFace/AssemblyInfo.cpp create mode 100644 Chapter11/OptimizedHappyFace/Form1.h create mode 100644 Chapter11/OptimizedHappyFace/Form1.resx create mode 100644 Chapter11/OptimizedHappyFace/OptimizedHappyFace.cpp create mode 100644 Chapter11/OptimizedHappyFace/OptimizedHappyFace.vcproj create mode 100644 Chapter11/OptimizedHappyFace/stdafx.cpp create mode 100644 Chapter11/OptimizedHappyFace/stdafx.h create mode 100644 Chapter11/PrintHappyFace/AssemblyInfo.cpp create mode 100644 Chapter11/PrintHappyFace/Form1.h create mode 100644 Chapter11/PrintHappyFace/Form1.resx create mode 100644 Chapter11/PrintHappyFace/PrintHappyFace.cpp create mode 100644 Chapter11/PrintHappyFace/PrintHappyFace.vcproj create mode 100644 Chapter11/PrintHappyFace/stdafx.cpp create mode 100644 Chapter11/PrintHappyFace/stdafx.h create mode 100644 Chapter11/RegionEx/AssemblyInfo.cpp create mode 100644 Chapter11/RegionEx/Form1.h create mode 100644 Chapter11/RegionEx/Form1.resx create mode 100644 Chapter11/RegionEx/RegionEx.cpp create mode 100644 Chapter11/RegionEx/RegionEx.vcproj create mode 100644 Chapter11/RegionEx/stdafx.cpp create mode 100644 Chapter11/RegionEx/stdafx.h create mode 100644 Chapter11/ScrollingHappyFace/AssemblyInfo.cpp create mode 100644 Chapter11/ScrollingHappyFace/Form1.h create mode 100644 Chapter11/ScrollingHappyFace/Form1.resx create mode 100644 Chapter11/ScrollingHappyFace/ScrollingHappyFace.cpp create mode 100644 Chapter11/ScrollingHappyFace/ScrollingHappyFace.vcproj create mode 100644 Chapter11/ScrollingHappyFace/stdafx.cpp create mode 100644 Chapter11/ScrollingHappyFace/stdafx.h create mode 100644 Chapter11/SingleBuffering/AssemblyInfo.cpp create mode 100644 Chapter11/SingleBuffering/Form1.h create mode 100644 Chapter11/SingleBuffering/Form1.resx create mode 100644 Chapter11/SingleBuffering/SingleBuffering.cpp create mode 100644 Chapter11/SingleBuffering/SingleBuffering.vcproj create mode 100644 Chapter11/SingleBuffering/stdafx.cpp create mode 100644 Chapter11/SingleBuffering/stdafx.h create mode 100644 Chapter11/StringRect/AssemblyInfo.cpp create mode 100644 Chapter11/StringRect/Form1.h create mode 100644 Chapter11/StringRect/Form1.resx create mode 100644 Chapter11/StringRect/StringRect.cpp create mode 100644 Chapter11/StringRect/StringRect.vcproj create mode 100644 Chapter11/StringRect/stdafx.cpp create mode 100644 Chapter11/StringRect/stdafx.h create mode 100644 Chapter11/TextureBrushEx/AssemblyInfo.cpp create mode 100644 Chapter11/TextureBrushEx/Form1.h create mode 100644 Chapter11/TextureBrushEx/Form1.resx create mode 100644 Chapter11/TextureBrushEx/Images/CLICppCover.gif create mode 100644 Chapter11/TextureBrushEx/TextureBrushEx.cpp create mode 100644 Chapter11/TextureBrushEx/TextureBrushEx.vcproj create mode 100644 Chapter11/TextureBrushEx/stdafx.cpp create mode 100644 Chapter11/TextureBrushEx/stdafx.h create mode 100644 Chapter12/Chapter12.sln create mode 100644 Chapter12/Chapter12.suo create mode 100644 Chapter12/ConnectedBasics/AssemblyInfo.cpp create mode 100644 Chapter12/ConnectedBasics/ConnectedBasics.cpp create mode 100644 Chapter12/ConnectedBasics/ConnectedBasics.vcproj create mode 100644 Chapter12/ConnectedModify/AssemblyInfo.cpp create mode 100644 Chapter12/ConnectedModify/ConnectedModify.cpp create mode 100644 Chapter12/ConnectedModify/ConnectedModify.vcproj create mode 100644 Chapter12/ConnectedQuery/AssemblyInfo.cpp create mode 100644 Chapter12/ConnectedQuery/ConnectedQuery.cpp create mode 100644 Chapter12/ConnectedQuery/ConnectedQuery.vcproj create mode 100644 Chapter12/ConnectedScalar/AssemblyInfo.cpp create mode 100644 Chapter12/ConnectedScalar/ConnectedScalar.cpp create mode 100644 Chapter12/ConnectedScalar/ConnectedScalar.vcproj create mode 100644 Chapter12/MaintAuthors/AssemblyInfo.cpp create mode 100644 Chapter12/MaintAuthors/Form1.h create mode 100644 Chapter12/MaintAuthors/Form1.resx create mode 100644 Chapter12/MaintAuthors/MaintAuthors.cpp create mode 100644 Chapter12/MaintAuthors/MaintAuthors.vcproj create mode 100644 Chapter12/MaintAuthors/stdafx.cpp create mode 100644 Chapter12/MaintAuthors/stdafx.h create mode 100644 Chapter12/MaintAuthorsDGV/AssemblyInfo.cpp create mode 100644 Chapter12/MaintAuthorsDGV/AuthorsDS.h create mode 100644 Chapter12/MaintAuthorsDGV/AuthorsDS.xsc create mode 100644 Chapter12/MaintAuthorsDGV/AuthorsDS.xsd create mode 100644 Chapter12/MaintAuthorsDGV/AuthorsDS.xss create mode 100644 Chapter12/MaintAuthorsDGV/Form1.h create mode 100644 Chapter12/MaintAuthorsDGV/Form1.resx create mode 100644 Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.cpp create mode 100644 Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.vcproj create mode 100644 Chapter12/MaintAuthorsDGV/stdafx.cpp create mode 100644 Chapter12/MaintAuthorsDGV/stdafx.h create mode 100644 Chapter12/Transactions/AssemblyInfo.cpp create mode 100644 Chapter12/Transactions/Transactions.cpp create mode 100644 Chapter12/Transactions/Transactions.vcproj create mode 100644 Chapter13/ADONET/ADONET.cpp create mode 100644 Chapter13/ADONET/ADONET.vcproj create mode 100644 Chapter13/Chapter13.sln create mode 100644 Chapter13/Chapter13.suo create mode 100644 Chapter13/ReadXML/Monsters.xml create mode 100644 Chapter13/ReadXML/ReadXML.cpp create mode 100644 Chapter13/ReadXML/ReadXML.vcproj create mode 100644 Chapter13/ReadXMLDOM/Monsters.xml create mode 100644 Chapter13/ReadXMLDOM/ReadXMLDOM.cpp create mode 100644 Chapter13/ReadXMLDOM/ReadXMLDOM.vcproj create mode 100644 Chapter13/ReadXPathNav/Monsters.xml create mode 100644 Chapter13/ReadXPathNav/ReadXPathNav.cpp create mode 100644 Chapter13/ReadXPathNav/ReadXPathNav.vcproj create mode 100644 Chapter13/UpdateXML/Monsters.xml create mode 100644 Chapter13/UpdateXML/New_Monsters.xml create mode 100644 Chapter13/UpdateXML/UpdateXML.cpp create mode 100644 Chapter13/UpdateXML/UpdateXML.vcproj create mode 100644 Chapter13/UpdateXMLDOM/Monsters.xml create mode 100644 Chapter13/UpdateXMLDOM/New_Monsters.xml create mode 100644 Chapter13/UpdateXMLDOM/UpdateXMLDOM.cpp create mode 100644 Chapter13/UpdateXMLDOM/UpdateXMLDOM.vcproj create mode 100644 Chapter13/ValidateXML/Monsters.dtd create mode 100644 Chapter13/ValidateXML/Monsters.h create mode 100644 Chapter13/ValidateXML/Monsters.xml create mode 100644 Chapter13/ValidateXML/Monsters.xsd create mode 100644 Chapter13/ValidateXML/Monsters.xsx create mode 100644 Chapter13/ValidateXML/ValidateXML.cpp create mode 100644 Chapter13/ValidateXML/ValidateXML.vcproj create mode 100644 Chapter13/WriteXML/Goblin.xml create mode 100644 Chapter13/WriteXML/WriteXML.cpp create mode 100644 Chapter13/WriteXML/WriteXML.vcproj create mode 100644 Chapter13/WriteXMLDOM/Monsters.xml create mode 100644 Chapter13/WriteXMLDOM/New_Monsters.xml create mode 100644 Chapter13/WriteXMLDOM/WriteXMLDOM.cpp create mode 100644 Chapter13/WriteXMLDOM/WriteXMLDOM.vcproj create mode 100644 Chapter13/XPathEx/Monsters.xml create mode 100644 Chapter13/XPathEx/XPathEx.cpp create mode 100644 Chapter13/XPathEx/XPathEx.vcproj create mode 100644 Chapter14/Chapter14.sln create mode 100644 Chapter14/Chapter14.suo create mode 100644 Chapter14/Simple/AssemblyInfo.cpp create mode 100644 Chapter14/Simple/ProjectInstaller.cpp create mode 100644 Chapter14/Simple/ProjectInstaller.h create mode 100644 Chapter14/Simple/ProjectInstaller.resx create mode 100644 Chapter14/Simple/Simple.vcproj create mode 100644 Chapter14/Simple/SimpleWinService.cpp create mode 100644 Chapter14/Simple/SimpleWinService.h create mode 100644 Chapter14/Simple/SimpleWinService.resx create mode 100644 Chapter14/Simple/stdafx.cpp create mode 100644 Chapter14/Simple/stdafx.h create mode 100644 Chapter14/SimpleCtrl/AssemblyInfo.cpp create mode 100644 Chapter14/SimpleCtrl/Form1.h create mode 100644 Chapter14/SimpleCtrl/Form1.resx create mode 100644 Chapter14/SimpleCtrl/SimpleCtrl.cpp create mode 100644 Chapter14/SimpleCtrl/SimpleCtrl.vcproj create mode 100644 Chapter14/SimpleCtrl/stdafx.cpp create mode 100644 Chapter14/SimpleCtrl/stdafx.h create mode 100644 Chapter15/AuthorWS/AssemblyInfo.cpp create mode 100644 Chapter15/AuthorWS/AuthorWS.asmx create mode 100644 Chapter15/AuthorWS/AuthorWS.vcproj create mode 100644 Chapter15/AuthorWS/AuthorWSClass.cpp create mode 100644 Chapter15/AuthorWS/AuthorWSClass.h create mode 100644 Chapter15/AuthorWS/Global.asax create mode 100644 Chapter15/AuthorWS/Global.asax.h create mode 100644 Chapter15/AuthorWS/Web.config create mode 100644 Chapter15/AuthorWS/stdafx.cpp create mode 100644 Chapter15/AuthorWS/stdafx.h create mode 100644 Chapter15/Chapter15.sln create mode 100644 Chapter15/Chapter15.suo create mode 100644 Chapter15/FindZipCode/AssemblyInfo.cpp create mode 100644 Chapter15/FindZipCode/FindZipCode.asmx create mode 100644 Chapter15/FindZipCode/FindZipCode.vcproj create mode 100644 Chapter15/FindZipCode/FindZipCodeClass.cpp create mode 100644 Chapter15/FindZipCode/FindZipCodeClass.h create mode 100644 Chapter15/FindZipCode/Global.asax create mode 100644 Chapter15/FindZipCode/Global.asax.h create mode 100644 Chapter15/FindZipCode/Web.config create mode 100644 Chapter15/FindZipCode/stdafx.cpp create mode 100644 Chapter15/FindZipCode/stdafx.h create mode 100644 Chapter15/MaintAuthors/AssemblyInfo.cpp create mode 100644 Chapter15/MaintAuthors/AuthorWS.h create mode 100644 Chapter15/MaintAuthors/AuthorWS/AuthorWS.disco create mode 100644 Chapter15/MaintAuthors/AuthorWS/AuthorWS.wsdl create mode 100644 Chapter15/MaintAuthors/AuthorWS/results.discomap create mode 100644 Chapter15/MaintAuthors/Form1.h create mode 100644 Chapter15/MaintAuthors/Form1.resx create mode 100644 Chapter15/MaintAuthors/MaintAuthors.cpp create mode 100644 Chapter15/MaintAuthors/MaintAuthors.vcproj create mode 100644 Chapter15/MaintAuthors/MaintAuthors.vcproj.vspscc create mode 100644 Chapter15/MaintAuthors/stdafx.cpp create mode 100644 Chapter15/MaintAuthors/stdafx.h create mode 100644 Chapter15/MaintAuthors/webservice.h create mode 100644 Chapter15/ZipCodeConsoleClient/AssemblyInfo.cpp create mode 100644 Chapter15/ZipCodeConsoleClient/FindZipCode.h create mode 100644 Chapter15/ZipCodeConsoleClient/FindZipCode/FindZipCode.disco create mode 100644 Chapter15/ZipCodeConsoleClient/FindZipCode/FindZipCode.wsdl create mode 100644 Chapter15/ZipCodeConsoleClient/FindZipCode/results.discomap create mode 100644 Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.cpp create mode 100644 Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.vcproj create mode 100644 Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.vcproj.vspscc create mode 100644 Chapter15/ZipCodeConsoleClient/resource.h create mode 100644 Chapter15/ZipCodeConsoleClient/stdafx.cpp create mode 100644 Chapter15/ZipCodeConsoleClient/stdafx.h create mode 100644 Chapter15/ZipCodeConsoleClient/webservice.h create mode 100644 Chapter16/AbortingThreads/AbortingThreads.cpp create mode 100644 Chapter16/AbortingThreads/AbortingThreads.vcproj create mode 100644 Chapter16/AbortingThreads/AbortingThreads.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/Chapter16.sln create mode 100644 Chapter16/Chapter16.suo create mode 100644 Chapter16/ISRingThreads/ISRingThreads.cpp create mode 100644 Chapter16/ISRingThreads/ISRingThreads.vcproj create mode 100644 Chapter16/ISRingThreads/ISRingThreads.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/InterlockedVars/InterlockedVars.cpp create mode 100644 Chapter16/InterlockedVars/InterlockedVars.vcproj create mode 100644 Chapter16/InterlockedVars/InterlockedVars.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/JoiningThreads/JoiningThreads.cpp create mode 100644 Chapter16/JoiningThreads/JoiningThreads.vcproj create mode 100644 Chapter16/JoiningThreads/JoiningThreads.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/MutexSpawn/MutexSpawn.cpp create mode 100644 Chapter16/MutexSpawn/MutexSpawn.vcproj create mode 100644 Chapter16/MutexSpawn/MutexSpawn.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/SleepingThreads/SleepingThreads.cpp create mode 100644 Chapter16/SleepingThreads/SleepingThreads.vcproj create mode 100644 Chapter16/SleepingThreads/SleepingThreads.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/StartingThreads/StartingThreads.cpp create mode 100644 Chapter16/StartingThreads/StartingThreads.vcproj create mode 100644 Chapter16/StartingThreads/StartingThreads.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/SyncByMonitor/SyncByMonitor.cpp create mode 100644 Chapter16/SyncByMonitor/SyncByMonitor.vcproj create mode 100644 Chapter16/SyncByMonitor/SyncByMonitor.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/SyncByMutex/SyncByMutex.cpp create mode 100644 Chapter16/SyncByMutex/SyncByMutex.vcproj create mode 100644 Chapter16/SyncByMutex/SyncByMutex.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/SyncByRWLock/SyncByRWLock.cpp create mode 100644 Chapter16/SyncByRWLock/SyncByRWLock.vcproj create mode 100644 Chapter16/SyncByRWLock/SyncByRWLock.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/ThreadPooling/ThreadPooling.cpp create mode 100644 Chapter16/ThreadPooling/ThreadPooling.vcproj create mode 100644 Chapter16/ThreadPooling/ThreadPooling.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter16/ThreadStaticVars/ThreadStaticVars.cpp create mode 100644 Chapter16/ThreadStaticVars/ThreadStaticVars.vcproj create mode 100644 Chapter16/ThreadStaticVars/ThreadStaticVars.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/Async_TcpServer/Async_TcpServer.vcproj create mode 100644 Chapter17/Async_TcpServer/Async_TcpServer.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/Async_TcpServer/TcpServer_Async.cpp create mode 100644 Chapter17/Chapter17.sln create mode 100644 Chapter17/Chapter17.suo create mode 100644 Chapter17/TcpClient/TcpClient.cpp create mode 100644 Chapter17/TcpClient/TcpClient.vcproj create mode 100644 Chapter17/TcpClient/TcpClient.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/TcpClient_Stream/TcpClient_Stream.cpp create mode 100644 Chapter17/TcpClient_Stream/TcpClient_Stream.vcproj create mode 100644 Chapter17/TcpClient_Stream/TcpClient_Stream.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/TcpServer/TcpServer.cpp create mode 100644 Chapter17/TcpServer/TcpServer.vcproj create mode 100644 Chapter17/TcpServer/TcpServer.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/TcpServer_Listener/TcpServer_Listener.cpp create mode 100644 Chapter17/TcpServer_Listener/TcpServer_Listener.vcproj create mode 100644 Chapter17/TcpServer_Listener/TcpServer_Listener.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/TcpServer_Stream/TcpServer_Stream.cpp create mode 100644 Chapter17/TcpServer_Stream/TcpServer_Stream.vcproj create mode 100644 Chapter17/TcpServer_Stream/TcpServer_Stream.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/UDPConnect/UDPConnect.cpp create mode 100644 Chapter17/UDPConnect/UDPConnect.vcproj create mode 100644 Chapter17/UDPConnect/UDPConnect.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/UdpClient/UdpClient.cpp create mode 100644 Chapter17/UdpClient/UdpClient.vcproj create mode 100644 Chapter17/UdpClient/UdpClient.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/UdpClient_Helper/UdpClient_Helper.cpp create mode 100644 Chapter17/UdpClient_Helper/UdpClient_Helper.vcproj create mode 100644 Chapter17/UdpClient_Helper/UdpClient_Helper.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/UdpClient_Timeout/UdpClient_Timeout.cpp create mode 100644 Chapter17/UdpClient_Timeout/UdpClient_Timeout.vcproj create mode 100644 Chapter17/UdpClient_Timeout/UdpClient_Timeout.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/UdpServer/UdpServer.cpp create mode 100644 Chapter17/UdpServer/UdpServer.vcproj create mode 100644 Chapter17/UdpServer/UdpServer.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter17/UdpServer_Helper/UdpServer_Helper.cpp create mode 100644 Chapter17/UdpServer_Helper/UdpServer_Helper.vcproj create mode 100644 Chapter17/UdpServer_Helper/UdpServer_Helper.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/Chapter18.sln create mode 100644 Chapter18/Chapter18.suo create mode 100644 Chapter18/DocTestLib/AssemblyInfo.cpp create mode 100644 Chapter18/DocTestLib/DocTestLib.cpp create mode 100644 Chapter18/DocTestLib/DocTestLib.h create mode 100644 Chapter18/DocTestLib/DocTestLib.vcproj create mode 100644 Chapter18/DocTestLib/DocTestLib.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/Documentation/AssemblyInfo.cpp create mode 100644 Chapter18/Documentation/Documentation.cpp create mode 100644 Chapter18/Documentation/Documentation.h create mode 100644 Chapter18/Documentation/Documentation.vcproj create mode 100644 Chapter18/Documentation/Documentation.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/DocumentationWriter/AssemblyInfo.cpp create mode 100644 Chapter18/DocumentationWriter/DocumentationWriter.cpp create mode 100644 Chapter18/DocumentationWriter/DocumentationWriter.vcproj create mode 100644 Chapter18/DocumentationWriter/DocumentationWriter.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/DocumentationWriter/stdafx.cpp create mode 100644 Chapter18/DocumentationWriter/stdafx.h create mode 100644 Chapter18/EmbeddingResources/Animal.resx create mode 100644 Chapter18/EmbeddingResources/AssemblyInfo.cpp create mode 100644 Chapter18/EmbeddingResources/Color.txt create mode 100644 Chapter18/EmbeddingResources/EmbeddingResources.cpp create mode 100644 Chapter18/EmbeddingResources/EmbeddingResources.vcproj create mode 100644 Chapter18/EmbeddingResources/EmbeddingResources.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/EmbeddingResources/fruit.resources create mode 100644 Chapter18/EmbeddingResources/fruit.txt create mode 100644 Chapter18/Invoking/AssemblyInfo.cpp create mode 100644 Chapter18/Invoking/Form1.h create mode 100644 Chapter18/Invoking/Form1.resx create mode 100644 Chapter18/Invoking/Invoking.cpp create mode 100644 Chapter18/Invoking/Invoking.vcproj create mode 100644 Chapter18/Invoking/Invoking.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/Invoking/stdafx.cpp create mode 100644 Chapter18/Invoking/stdafx.h create mode 100644 Chapter18/MultiCultureApp/AssemblyInfo.cpp create mode 100644 Chapter18/MultiCultureApp/Form1.de-DE.resx create mode 100644 Chapter18/MultiCultureApp/Form1.fr-FR.resx create mode 100644 Chapter18/MultiCultureApp/Form1.h create mode 100644 Chapter18/MultiCultureApp/Form1.resx create mode 100644 Chapter18/MultiCultureApp/MultiCultureApp.cpp create mode 100644 Chapter18/MultiCultureApp/MultiCultureApp.vcproj create mode 100644 Chapter18/MultiCultureApp/MultiCultureApp.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/MultiCultureApp/stdafx.cpp create mode 100644 Chapter18/MultiCultureApp/stdafx.h create mode 100644 Chapter18/MultiCultureConsole/Colors.fr-fr.resx create mode 100644 Chapter18/MultiCultureConsole/Colors.resx create mode 100644 Chapter18/MultiCultureConsole/MultiCultureConsole.cpp create mode 100644 Chapter18/MultiCultureConsole/MultiCultureConsole.vcproj create mode 100644 Chapter18/MultiCultureConsole/MultiCultureConsole.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/MultiCultureDate/MultiCultureDate.cpp create mode 100644 Chapter18/MultiCultureDate/MultiCultureDate.vcproj create mode 100644 Chapter18/MultiCultureDate/MultiCultureDate.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.cpp create mode 100644 Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.exe.config create mode 100644 Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.vcproj create mode 100644 Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/Reflecting/AssemblyInfo.cpp create mode 100644 Chapter18/Reflecting/Form1.h create mode 100644 Chapter18/Reflecting/Form1.resx create mode 100644 Chapter18/Reflecting/Reflecting.cpp create mode 100644 Chapter18/Reflecting/Reflecting.vcproj create mode 100644 Chapter18/Reflecting/Reflecting.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter18/Reflecting/stdafx.cpp create mode 100644 Chapter18/Reflecting/stdafx.h create mode 100644 Chapter18/SharedAssembly/AssemblyInfo.cpp create mode 100644 Chapter18/SharedAssembly/SharedAssembly.cpp create mode 100644 Chapter18/SharedAssembly/SharedAssembly.h create mode 100644 Chapter18/SharedAssembly/SharedAssembly.snk create mode 100644 Chapter18/SharedAssembly/SharedAssembly.vcproj create mode 100644 Chapter18/SharedAssembly/SharedAssembly.vcproj.AMIDALA.Stephen Fraser.user create mode 100644 Chapter19/AssertDenyPermit/AssemblyInfo.cpp create mode 100644 Chapter19/AssertDenyPermit/AssertDenyPermit.cpp create mode 100644 Chapter19/AssertDenyPermit/AssertDenyPermit.vcproj create mode 100644 Chapter19/AssertDenyPermit/ReadMe.txt create mode 100644 Chapter19/AssertDenyPermit/app.ico create mode 100644 Chapter19/AssertDenyPermit/app.rc create mode 100644 Chapter19/AssertDenyPermit/resource.h create mode 100644 Chapter19/AssertDenyPermit/stdafx.cpp create mode 100644 Chapter19/AssertDenyPermit/stdafx.h create mode 100644 Chapter19/CASSecurity/AssemblyInfo.cpp create mode 100644 Chapter19/CASSecurity/CASSecurity.cpp create mode 100644 Chapter19/CASSecurity/CASSecurity.vcproj create mode 100644 Chapter19/CASSecurity/Form1.h create mode 100644 Chapter19/CASSecurity/Form1.resx create mode 100644 Chapter19/CASSecurity/ReadMe.txt create mode 100644 Chapter19/CASSecurity/app.ico create mode 100644 Chapter19/CASSecurity/app.rc create mode 100644 Chapter19/CASSecurity/resource.h create mode 100644 Chapter19/CASSecurity/stdafx.cpp create mode 100644 Chapter19/CASSecurity/stdafx.h create mode 100644 Chapter19/Chapter19.sln create mode 100644 Chapter19/Chapter19.suo create mode 100644 Chapter19/PrincipalIdentity/AssemblyInfo.cpp create mode 100644 Chapter19/PrincipalIdentity/PrincipalIdentity.cpp create mode 100644 Chapter19/PrincipalIdentity/PrincipalIdentity.vcproj create mode 100644 Chapter19/PrincipalIdentity/ReadMe.txt create mode 100644 Chapter19/PrincipalIdentity/app.ico create mode 100644 Chapter19/PrincipalIdentity/app.rc create mode 100644 Chapter19/PrincipalIdentity/resource.h create mode 100644 Chapter19/PrincipalIdentity/stdafx.cpp create mode 100644 Chapter19/PrincipalIdentity/stdafx.h create mode 100644 Chapter19/RemoveSecurity/AssemblyInfo.cpp create mode 100644 Chapter19/RemoveSecurity/ReadMe.txt create mode 100644 Chapter19/RemoveSecurity/RemoveSecurity.cpp create mode 100644 Chapter19/RemoveSecurity/RemoveSecurity.vcproj create mode 100644 Chapter19/RemoveSecurity/app.ico create mode 100644 Chapter19/RemoveSecurity/app.rc create mode 100644 Chapter19/RemoveSecurity/resource.h create mode 100644 Chapter19/RemoveSecurity/stdafx.cpp create mode 100644 Chapter19/RemoveSecurity/stdafx.h create mode 100644 Chapter19/RoleBasedSecurity/AssemblyInfo.cpp create mode 100644 Chapter19/RoleBasedSecurity/ReadMe.txt create mode 100644 Chapter19/RoleBasedSecurity/RoleBasedSecurity.cpp create mode 100644 Chapter19/RoleBasedSecurity/RoleBasedSecurity.vcproj create mode 100644 Chapter19/RoleBasedSecurity/app.ico create mode 100644 Chapter19/RoleBasedSecurity/app.rc create mode 100644 Chapter19/RoleBasedSecurity/resource.h create mode 100644 Chapter19/RoleBasedSecurity/stdafx.cpp create mode 100644 Chapter19/RoleBasedSecurity/stdafx.h create mode 100644 Chapter19/SetSecurity/AssemblyInfo.cpp create mode 100644 Chapter19/SetSecurity/ReadMe.txt create mode 100644 Chapter19/SetSecurity/SetSecurity.cpp create mode 100644 Chapter19/SetSecurity/SetSecurity.vcproj create mode 100644 Chapter19/SetSecurity/app.ico create mode 100644 Chapter19/SetSecurity/app.rc create mode 100644 Chapter19/SetSecurity/resource.h create mode 100644 Chapter19/SetSecurity/stdafx.cpp create mode 100644 Chapter19/SetSecurity/stdafx.h create mode 100644 Chapter20/Chapter20.sln create mode 100644 Chapter20/Chapter20.suo create mode 100644 Chapter20/IntPtrArith/IntPtrArith.cpp create mode 100644 Chapter20/IntPtrArith/IntPtrArith.vcproj create mode 100644 Chapter20/IntPtrMoving/IntPtr.cpp create mode 100644 Chapter20/IntPtrMoving/IntPtrMoving.vcproj create mode 100644 Chapter20/MixManUnman/MixManUnman.cpp create mode 100644 Chapter20/MixManUnman/MixManUnman.vcproj create mode 100644 Chapter20/MixManUnmanClass/MixManUnmanClass.cpp create mode 100644 Chapter20/MixManUnmanClass/MixManUnmanClass.vcproj create mode 100644 Chapter20/MixManUnmanHello/MixManUnmanHello.cpp create mode 100644 Chapter20/MixManUnmanHello/MixManUnmanHello.vcproj create mode 100644 Chapter20/PinIntPtr/PinIntPtr.cpp create mode 100644 Chapter20/PinIntPtr/PinIntPtr.vcproj create mode 100644 Chapter20/PinPtr/PinPtr.cpp create mode 100644 Chapter20/PinPtr/PinPtr.vcproj create mode 100644 Chapter20/UMArray/UMArray.cpp create mode 100644 Chapter20/UMArray/UMArray.vcproj create mode 100644 Chapter20/VcclrEx/VcclrEx.cpp create mode 100644 Chapter20/VcclrEx/VcclrEx.vcproj create mode 100644 Chapter21/Chapter21.sln create mode 100644 Chapter21/Chapter21.suo create mode 100644 Chapter21/ClassMarshal/AssemblyInfo.cpp create mode 100644 Chapter21/ClassMarshal/ClassMarshal.cpp create mode 100644 Chapter21/ClassMarshal/ClassMarshal.vcproj create mode 100644 Chapter21/ClassMarshal/stdafx.cpp create mode 100644 Chapter21/ClassMarshal/stdafx.h create mode 100644 Chapter21/DllOldWay/AssemblyInfo.cpp create mode 100644 Chapter21/DllOldWay/DllOldWay.cpp create mode 100644 Chapter21/DllOldWay/DllOldWay.vcproj create mode 100644 Chapter21/DllOldWay/stdafx.cpp create mode 100644 Chapter21/DllOldWay/stdafx.h create mode 100644 Chapter21/LateBindCOM/AssemblyInfo.cpp create mode 100644 Chapter21/LateBindCOM/LateBindCOM.cpp create mode 100644 Chapter21/LateBindCOM/LateBindCOM.vcproj create mode 100644 Chapter21/LateBindCOM/stdafx.cpp create mode 100644 Chapter21/LateBindCOM/stdafx.h create mode 100644 Chapter21/ManualCom/ManualCOM.cpp create mode 100644 Chapter21/ManualCom/ManualCom.vcproj create mode 100644 Chapter21/ManualCom/TestCom.dll create mode 100644 Chapter21/NativeCode/NativeCode.cpp create mode 100644 Chapter21/NativeCode/NativeCode.vcproj create mode 100644 Chapter21/NativeCode/stdafx.cpp create mode 100644 Chapter21/NativeCode/stdafx.h create mode 100644 Chapter21/SimpleCOM/AssemblyInfo.cpp create mode 100644 Chapter21/SimpleCOM/Interop/Interop.TestCOM.1.0.dll create mode 100644 Chapter21/SimpleCOM/SimpleCOM.cpp create mode 100644 Chapter21/SimpleCOM/SimpleCOM.vcproj create mode 100644 Chapter21/SimpleCOM/stdafx.cpp create mode 100644 Chapter21/SimpleCOM/stdafx.h create mode 100644 Chapter21/SimplePInvoke/AssemblyInfo.cpp create mode 100644 Chapter21/SimplePInvoke/SimplePInvoke.cpp create mode 100644 Chapter21/SimplePInvoke/SimplePInvoke.vcproj create mode 100644 Chapter21/SimplePInvoke/stdafx.cpp create mode 100644 Chapter21/SimplePInvoke/stdafx.h create mode 100644 Chapter21/StaticMethodPInvoke/AssemblyInfo.cpp create mode 100644 Chapter21/StaticMethodPInvoke/StaticMethodPInvoke.cpp create mode 100644 Chapter21/StaticMethodPInvoke/StaticMethodPInvoke.vcproj create mode 100644 Chapter21/StaticMethodPInvoke/stdafx.cpp create mode 100644 Chapter21/StaticMethodPInvoke/stdafx.h create mode 100644 Chapter21/TestCOM/TestCOM.cpp create mode 100644 Chapter21/TestCOM/TestCOM.vcproj create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 ReadMe.txt create mode 100644 contributing.md diff --git a/2554.pdf b/2554.pdf new file mode 100644 index 0000000000000000000000000000000000000000..66020dd8fce34139ec1c89c1cd5b3dcb761e7ab8 GIT binary patch literal 198640 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
%|)TBW9}qLp`LxoDWh5>kMu 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 az02c#szZRoXz)&326%K-y^+#V*2Ep|s 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

~pd*Q@q8vPW#K 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 x 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

#E$+!20^_8TTUOgwK*ChY(af)+l9j1A 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

=|$J1HE2H<3EP=x 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 ueq_!d&evl!Pcu1-QY!Cj7 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ஷR3|D*lKR^*rl@&seCwM~O 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

2KG{U%dDeuL7(Vl7vt|=0Gc_OXyfMA*w0B?XO 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≧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

47J$d%#Dj=q<5EF1vpTyLK+zNzBbZ2ib|7oh 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%0D%LyX+~{9gpc%o`_~R|l;PQvDJ0 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

3a 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

xpiK0DxmBM{6*RTM@N_2avL?C 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

&9OE~*3rZZ5%1>yuGeVx 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

p{wwPv8)$t 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

X18w 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�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

SD_{}& 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
hDheT$ht`oPc-c`Zq1Z`f-FhSMl`B)SR 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 z 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
vaG47WGrej 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

B$Rm{{o`q_@k_hE6FRT;I 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⋙lSEu2;AmE`f37xdP>^RiM)yT0U3+#k7G% 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 CyA}cf literal 0 HcmV?d00001 diff --git a/2744.html b/2744.html new file mode 100644 index 0000000..301eff9 --- /dev/null +++ b/2744.html @@ -0,0 +1 @@ + Reprint -- Pro Visual C++/CLI and the

Reprint -- Pro Visual C++/CLI and the .NET 2.0 Platform – Fixes

 

Page xxvii, So What Did You Say About C++/CLI?, Paragraph 2 read:

 

  • Mixed mode: source-level mix of native and CTS types plus binary mix of native and CIL object files. (Compiler switch: \clr.)
  • Pure mode: source-level mix of native and CTS types. All compiled to CIL object files. (Compiler switch: \clr:pure.)
  • Native class can hold CTS types through a special wrapper class only.
  • CTS classes can hold native types only as pointers.

Of course, the C++/CLI programmer can also choose to program with the .NET managed types only, and in this way provide verifiable code, using the \clr:safe Visual C++ compiler switch.

 

It should read (changes highlighted):

 

  • Mixed mode: source-level mix of native and CTS types plus binary mix of native and CIL object files. (Compiler switch: /clr.)
  • Pure mode: source-level mix of native and CTS types. All compiled to CIL object files. (Compiler switch: /clr:pure.)
  • Native class can hold CTS types through a special wrapper class only.
  • CTS classes can hold native types only as pointers.

Of course, the C++/CLI programmer can also choose to program with the .NET managed types only, and in this way provide verifiable code, using the /clr:safe Visual C++ compiler switch.

 

 

Page xxviii

 

C++\CLI  should read:  C++/CLI   (occurs 5 times on the page)

 

Page 5, Figure 1-1

 

 [2nd label] Application Development Technologies should read:  .NET Framework Base Classes

 [3rd label] Application Development Technologies should read: Common Language Runtime

 

 

 

 

Page 6, 3rd bullet, 1st  line reads:

 

Managed code is used to create objects that can be garbage collection.

 

It should read (change highlighted):

 

Managed code is used to create objects that can be garbage collected.

 

Page 8, 6th bullet, 1st  line reads:

 

A list of all reference assemblies

 

It should read (change highlighted):

 

A list of all referenced assemblies

 

 

Page 17, Just-In-Time Compilation, Paragraph 2 reads:

 

The JIT compiling process is, in concept, very easy. When an application is started, the JIT compiler is called to convert the MSIL code and metadata into machine code. To avoid the potentially slow start-up time caused by compiling the entire application, the JIT compiler only compiles the portions of code that it calls, when they are called (hence the name, just-in-time compiler).

 

It should read (changes highlighted):

 

The JIT compiling process is, in concept, very easy. When an application is started, the JIT compiler is called to convert the MSIL code and metadata into machine code. To avoid the potentially slow start-up time caused by compiling the entire application, the JIT compiler only compiles the portions of code that the application calls, when they are called (hence the name, just-in-time compiler).

 

 

 

Page 19, 6th bullet, 1st line reads:

 

Handler types: A reference to a type

 

It should read (changes highlighted):

 

Handle types: A reference to a type

 

 

Page 19, Paragraph 1 reads:

 

A point worth mentioning is that the CLS defines all .NET-compatible language data types, but a .NET-compatible language does not need to support all CLS-defined data types.

 

It should read (changes highlighted):

 

A point worth mentioning is that the CTS defines all .NET-compatible language data types, but a .NET-compatible language does not need to support all CTS-defined data types.

 

 

Page 21, .NET Application Development Realms, Paragraph 1 reads:

 

.NET application development falls primarily into one of five realms: Web applications, Web services, Windows applications, Windows services, and console applications. Using languages such as C#, Visual Basic .NET, and Visual Studio .NET provides a simple, powerful, and consistent environment to develop all five. Unfortunately, for C++/CLI, only four are supported: console applications, Windows applications, Windows services, and Web services.

 

It should read (changes highlighted):

 

.NET application development falls primarily into one of five realms: Web applications, Web services, Windows applications, Windows services, and console applications. Using languages such as C#, Visual Basic .NET and C++/CLI, in conjunction with Visual Studio .NET provides a simple, powerful, and consistent environment to develop all five. Unfortunately, for C++/CLI, only four are supported: console applications, Windows applications, Windows services, and Web services.

 

 

Page 30, Paragraph 4 reads:

 

The preceding line actually declares one handle and one pointer to an int and two variables of type int.

 

It should read (changes highlighted):

 

The preceding lines actually declare one handle and one pointer to an int and two variables of type int.

 

 

Page 31, top of page reads:

 

int x = y = z = 200;

 

It should read (changes highlighted):

 

int y, z;

int x = y = z = 200;

 

 

 

 

 

Page 32, Table 2-3 reads:

 

Abstract     delegate       event          finally

Generic      in                 initonly       literal

Override     property      sealed         where

 

It should read (changes highlighted):

 

abstract     delegate       event          finally

generic      in                 initonly       literal

override     property      sealed         where

 

 

Page 34, in Caution reads:

 

A char is an 8-bit unsigned integer

 

It should read (changes highlighted):

 

A char is an 8-bit signed integer

 

 

Page 32, in Listing 2-1 reads:

 

// Initialize using charater literal

 

It should read (changes highlighted):

 

// Initialize using character literal

 

 

Page 43, paragraph 2 reads:

 

Like the fundamental types already discussed, enums default to being placed on the stack but can beused automatically as objects when required.

 

It should read (changes highlighted):

 

Like the fundamental types already discussed, enums default to being placed on the stack but can be used automatically as objects when required.

 

 

Page 43, paragraph 5 reads:

 

CLI enums are different from native enums in that the names of the CLI enums values, better known as enumerators, can only be found through the scope of the enums name, and the declaring of the enumÕs data type has no meaning with a CLI enum.

 

It should read (changes highlighted):

 

CLI enums are different from native enums in that the names of the CLI enums values, better known as enumerators, can only be found through the scope of the enums name, and the declaring of the enumÕs base data type has no meaning with a CLI enum.

 

 

 

Page 45, paragraph 2 reads:

 

Listing 2-8 is a simple example of a value class called Coord3D. It is made up of three doubles, a constructor, and a Write() method. I cover constructors and overriding in Chapter 3.

 

It should read (text to be removed highlighted):

 

Listing 2-8 is a simple example of a value class called Coord3D. It is made up of three doubles, a constructor, and a Write() method. I cover constructors and overriding in Chapter 3.

 

 

Page 46, last paragraph reads:

 

There are no stack base declarations of C++/CLI arrays using subscripts, as in traditional C++. All C++/CLI arrays are references and created on the managed heap.

 

It should read (changes highlighted):

 

There are no stack based declarations of C++/CLI arrays using subscripts, as in traditional C++. All C++/CLI arrays are references and created on the managed heap.

 

 

Page 47 reads:

 

Unlike what you have seen so far when declaring data types, arrays are declared with syntax very similar to a C++/CLI templates or .NET 2.0 generic classes. Also, to declare an array requires the namespace stdcli::language:

 

using namespace stdcli::language;

 

For those coders who had to struggle with the declaration syntax of an array in the previous version of .NET (1.0 and prior), the new syntax should seem like a breath of fresh air, as I believe is a little easier to work with do to three aspects of the declaration:

 

É

 

To create an instance of the array, use the constructor initialization format. Also, because you are allocating the array to the managed heap, the gcnew operator is required. Therefore, to create an array of five ints and an array of seven Strings would require the following statements:

 

using namespace stdcli::language;

 

array<int>^ fiveInts = gcnew array<int>(5);

array<String^>^ sevenStrings = gcnew array<String^>(7);

 

It should read (changes highlighted):

 

Unlike what you have seen so far when declaring data types, arrays are declared with syntax very similar to a C++/CLI templates or .NET 2.0 generic classes. Also, to declare an array requires the namespace stdcli::language:

 

using namespace stdcli::language;

 

For those coders who had to struggle with the declaration syntax of an array in the previous version of .NET (1.1 and prior), the new syntax should seem like a breath of fresh air, and I believe is a little easier to work with do to three aspects of the declaration:

 

É

 

To create an instance of the array, use the constructor initialization format. Also, because you are allocating the array to the managed heap, the gcnew operator is required. Therefore, to create an array of five ints and an array of seven Strings would require the following statements:

 

using namespace stdcli::language;

 

array<int>^ fiveInts = gcnew array<int>(5);

array<String^>^ sevenStrings = gcnew array<String^>(7);

 

 

Page 47, Code snippet after the second Unsafe code block read:

 

class CLASS {};

array<CLASS*>^ pClass = gcnew array<CLASS*>(5);

for (int i = 0; i < pClass->Length; i++)

    pClass[i] = new CLASS();

...

for (int i = 0; i < pClass->Length; i++)

    delete pClass[i];

 

It should read (changes highlighted):

 

class CLASS {};

array<CLASS*>^ hClass = gcnew array<CLASS*>(5);

for (int i = 0; i < hClass->Length; i++)

    hClass[i] = new CLASS();

...

for (int i = 0; i < hClass->Length; i++)

    delete hClass[i];

 

 

 

Page 48, first code snippet reads:

 

using namespace stdcli::language;

 

array<int, 1>^ Ints_5 = gcnew array<int>(5);

array<int, 2>^ Ints_5x3 = gcnew array<int>(5, 3);

array<int, 3>^ Ints_5x3x2 = gcnew array<int>(5, 3, 2);

 

It should read (text to be removed highlighted):

 

using namespace stdcli::language;

 

array<int, 1>^ Ints_5 = gcnew array<int>(5);

array<int, 2>^ Ints_5x3 = gcnew array<int>(5, 3);

array<int, 3>^ Ints_5x3x2 = gcnew array<int>(5, 3, 2);

 

 

Page 48, middle code snippet reads:

 

array< array<int>^ >^ jagged = gcnew array< array<int>^ >(4);

for (int i = 0; i < jagged->Length; i++)

{

    e[i] = gcnew array<int>((i+1) * 5); // each row 5 bigger

}

 

It should read (changes highlighted):

 

array< array<int>^ >^ jagged = gcnew array< array<int>^ >(4);

for (int i = 0; i < jagged->Length; i++)

{

    jagged[i] = gcnew array<int>((i+1) * 5); // each row 5 bigger

}

 

 

Pages 52, 61, 75, 80,  Assorted instances

 

Change all references of ÔInt32Õ on these pages to int

 

Page 59 second last line on listing 2-12 reads:

 

Console::WriteLine ( e ); // displays the letter 'e'

 

It should read (changes highlighted):

 

Console::WriteLine ( e ); // displays the letter 'E'

 

 

 

 

 

 

Pages 63 and continues on 64 reads: (Careful with this one. This error is from the first book)

 

The bitwise AND operator compares the bit pattern of its two operands. If both the bits at the same offset in the bit pattern are 1s, then the resulting bit pattern will become a 1; otherwise, it will become a 0. For example:

 

0101 & 0011 becomes 0001

 

The bitwise OR operator compares the bit pattern of its two operands. If either or both the bits at the same offset in the bit pattern are 1s, then the resulting bit pattern will become a 1; otherwise, it will become a 0. For example:

 

0101 & 0011 becomes 0111

 

The bitwise XOR operator compares the bit pattern of its two operands. If either, but not both, of the bits at the same offset in the bit pattern is a 1, then the resulting bit pattern will become a 1; otherwise, it will become a 0. For example:

 

0101 & 0011 becomes 0110

 

The ones complement operator simply flips the bits. If it was a 1, then it becomes a 0, and vice versa:

0101 becomes 1010

 

It should read (changes highlighted):

 

The bitwise AND operator compares the bit pattern of its two operands. If both the bits at the same offset in the bit pattern are 1s, then the resulting bit pattern will become a 1; otherwise, it will become a 0. For example:

 

0101 & 0011 becomes 0001

 

The bitwise OR operator compares the bit pattern of its two operands. If either or both the bits at the same offset in the bit pattern are 1s, then the resulting bit pattern will become a 1; otherwise, it will become a 0. For example:

 

0101 | 0011 becomes 0111

 

The bitwise XOR operator compares the bit pattern of its two operands. If either, but not both, of the bits at the same offset in the bit pattern is a 1, then the resulting bit pattern will become a 1; otherwise, it will become a 0. For example:

 

0101 ^ 0011 becomes 0110

 

The ones complement operator simply flips the bits. If it was a 1, then it becomes a 0, and vice versa:

~0101 becomes 1010

 

 

Page 75, paragraph one reads:

 

It means you canÕt add or remove elements to or from the collection. This is not an issue for arrays, given that this is not allowed anyway, but for many other collection types it may be a problem. The worst thing is if the compiler doesn't catch it. It is the CLR that lets you know about it by throwing an exception.

 

It should read (changes highlighted):

 

It means you canÕt add or remove elements to or from the collection. This is not an issue for arrays, given that this is not allowed anyway, but for many other collection types it may be a problem. The worst thing is that the compiler doesn't catch it. It is the CLR that lets you know about it by throwing an exception.

 

 

Page 76, paragraph 4 reads:

 

The parameter-list is a comma-separated list of variable declarations that define the variable, which will be passed to the function when it starts executing. Parameter variables can be any value types, references, handles, or pointers, even ones that are user defined.

 

It should read (changes highlighted):

 

The parameter-list is a comma-separated list of variable declarations that define the variables, which will be passed to the function when it starts executing. Parameter variables can be any value types, references, handles, or pointers, even ones that are user defined.

 

 

Page 77, middle of page reads:

 

int a = 5;

int b = example(a);

the value of a will be 10.

There is a pro and a con to using references. The pro is that it is faster to pass arguments by reference, as there is no copy step involved. The con is that, unlike using handlers, other than %, there is no difference between passing by value or reference. There is a very real possibility that changes can happen to argument variables within a function without the programmer knowing.

 

It should read (text to be removed highlighted):

 

int a = 5;

int b = example(a);

the value of a will be 10.

There is a pro and a con to using references. The pro is that it is faster to pass arguments by reference, as there is no copy step involved. The con is that, unlike using handlers, other than %, there is no difference between passing by value or reference. There is a very real possibility that changes can happen to argument variables within a function without the programmer knowing.

 

 

Page 90, Private Public and Protected..., end of paragraph 1 reads:

 

Most people who code C++ use the keywords ref class when they create objects, and ref struct is very seldom if ever used.

 

It should read (changes highlighted):

 

Most people who code C++/CLI use the keywords ref class when they create objects, and ref struct is very seldom if ever used.

 

 

Page 92, last paragraph reads:

 

If you have come from the traditional C++ world, you may have noticed the new keyword ref in front of the classÕs definition. This is one of the biggest and most important changes between traditional C++ and C++/CLI. (It is also a big change from C++/CLI and Managed Extensions for C++, as the keyword was __gc.)

 

It should read (text to be removed highlighted):

 

If you have come from the traditional C++ world, you may have noticed the new keyword ref in front of the classÕs definition. This is one of the biggest and most important changes between traditional C++ and C++/CLI. (It is also a big change for C++/CLI and Managed Extensions for C++, as the keyword was __gc.)

 

 

Page 97, last paragraph reads:

 

This fancy name is simply C++/CLIÕs way of reminding programmers that ref classes are objects. Member variables are simply variables defined within the definition of a ref class.

 

It should read (changes highlighted):

 

This fancy name is simply C++/CLIÕs way of reminding programmers that ref classes are object definitions. Member variables are simply variables defined within the definition of a ref class.

 

 

Page 98, 1st paragraph after Unsafe Code block reads:

 

Member variables can be public, protected, or private. With C++/CLI and ref classes, public member variables should be handled with care, especially if invalid values in these variables will cause problems in the programÕs execution.

 

It should read (changes highlighted):

 

Member variables can be public, protected, or private. With C++/CLI, a ref classÕs public member variables should be handled with care, especially if invalid values in these variables will cause problems in the programÕs execution.

 

 

 

Page 119, Scalar Properties, Paragraph 3 reads:

 

You can make a property write-only by excluding the set method in the propertyÕs declaration:

property type PropertyName

{

    type get() {};

}

Conversely, you can make the property read-only by excluding the get method:

property type PropertyName

{

    void set (type value) {};

}

The get() method gives you full access to the property to do as you please. The most common thing you will do is validate the parameter and then assign it to a private member variable.

The only real catch you might encounter is that the property name cannot be the same as a member variable. A conversion I use, which is by no means a standard, is to use a lowercase letter as the first letter of the member variable and an uppercase as the first letter of the property name.

With the addition of a set method, you are now free to put any calculation you want within the method, but it must return the type specified. For this type of property, the most common body of the method is a simple return of the member variable storage of the property.

 

It should read (changes highlighted):

 

You can make a property write-only by excluding the get() method in the propertyÕs declaration:

property type PropertyName

{

    void set(type value) {};

}

Conversely, you can make the property read-only by excluding the set() method:

property type PropertyName

{

    type get() {};

}

The set() method gives you full access to the property to do as you please. The most common thing you will do is validate the parameter and then assign it to a private member variable.

The only real catch you might encounter is that the property name cannot be the same as a member variable. A convention I use, which is by no means a standard, is to use a lowercase letter as the first letter of the member variable and an uppercase as the first letter of the property name.

With the addition of a get() method, you are now free to put any calculation you want within the method, but it must return the type specified. For this type of property, the most common body of the method is a simple return of the member variable storage of the property.

 

 

Page 127, listing 3-13 reads:

 

    property String^ default [int]

    {

        String^ get(int index)

        {

            if (index < 0)

                index = 0;

            else if (index > defaultArray->Length)

                index = defaultArray->Length - 1;

 

            return defaultArray[index];

        }

    }

private:

     array<String^>^ defaultArray;

};

 

void main()

{

    Numbers numbers;

 

    Console::WriteLine(numbers[-1]);

    Console::WriteLine(numbers[3]);

    Console::WriteLine(numbers[10]);

}

 

It should read (changes highlighted):

 

    property String^ default [int]

    {

        String^ get(int index)

        {

            if (index < 0)

                index = 0;

            else if (index > defaultArray->Length - 1)

                index = defaultArray->Length - 1;

 

            return defaultArray[index];

        }

    }

private:

     array<String^>^ defaultArray;

};

 

void main()

{

    Numbers numbers;

 

    Console::WriteLine(numbers[-1]);

    Console::WriteLine(numbers[3]);

    Console::WriteLine(numbers[6]);

}

 

 

 

Page 128, listing 3-14 reads:

 

public:

    ref class NestedClass // Declaration of the nested class

    {

    public:

        int publicMember;

    protected:

        int protectedMember;

    private:

        int privateMember;

    };

    NestedClass^ protectedNC; // protected variable reference to NestedClass

private:

    NestedClass^ privateNC; // private variable reference to NestedClass

 

It should read (changes highlighted):

 

public:

    ref class NestedClass // Declaration of the nested class

    {

    public:

        int publicMember;

    protected:

        int protectedMember;

    private:

        int privateMember;

    };

 

protected:

    NestedClass^ protectedNC; // protected variable reference to NestedClass

 

private:

    NestedClass^ privateNC; // private variable reference to NestedClass

 

 

 

Page 167, paragraph before Listing 4-10 reads:

 

Listing 4-10 shows a simple example of an exception. I noted in Chapter 3 that the safe_cast operator throws a System::InvalidCastException when it is unable to convert from one try to another.

 

It should read (changes highlighted):

 

Listing 4-10 shows a simple example of an exception. I noted in Chapter 3 that the safe_cast operator throws a System::InvalidCastException when it is unable to convert from one type to another.

 

 

Page 170, 1st code snippet reads:

 

try

{

    // Methods that throw OutOfMemoryException

}

catch (OutOfMemoryException *oome) // If a method throws an exception

{                                  // Execution will continue here

    // Process exception

}

 

It should read (changes highlighted):

 

try

{

    // Methods that throw OutOfMemoryException

}

catch (OutOfMemoryException ^oome) // If a method throws an exception

{                                  // Execution will continue here

    // Process exception

}

 

 

\ No newline at end of file diff --git a/9781590596401.jpg b/9781590596401.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8b44a1d64a353fbd18d5d0dabbfbdc9654fa7ff GIT binary patch literal 10518 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 literal 0 HcmV?d00001 diff --git a/Chapter02/Arrays.cpp b/Chapter02/Arrays.cpp new file mode 100644 index 0000000..eccc639 --- /dev/null +++ b/Chapter02/Arrays.cpp @@ -0,0 +1,76 @@ +using namespace System; + +// Arrays in Action +void main() +{ + // Single dimension + array^ a = gcnew array(4); + array^ b = gcnew array(4); + + for (int i = 0; i < a->Length; i++) + { + a[i] = i; + } + + for (int i = 0; i < b->Length; i++) + { + b[i] = a[i].ToString(); + } + + for (int i = 0; i < b->Length; i++) + { + Console::WriteLine(b[i]); + } + + Console::WriteLine(); + Array::Reverse(b); + for (int i = 0; i < b->Length; i++) + { + Console::WriteLine(b[i]); + } + + // Multi dimension uniform + array^ c = gcnew array(4,3); + array^ d = gcnew array(4,3); + + for (int x = 0; x < c->GetLength(0); x++) + { + for (int y = 0; y < c->GetLength(1); y++) + { + c[x,y] = (x*10)+y; + } + } + + Console::WriteLine(); + for (int x = 0; x < d->GetLength(0); x++) + { + for (int y = 0; y < d->GetLength(1); y++) + { + Console::Write("{0,-5:00}", c[x,y]); + } + Console::WriteLine(); + } + + // Multi dimension jagged + array< array^ >^ e = gcnew array^>(4); + + for (int x = 0; x < e->Length; x++) + { + e[x] = gcnew array(4+(x*2)); // each row 2 bigger + for(int y = 0; y < e[x]->Length; y++) + { + e[x][y] = (x*10)+y; + } + } + + Console::WriteLine(); + + for (int x = 0; x < e->Length; x++) + { + for (int y = 0; y < e[x]->Length; y++) + { + Console::Write("{0,-5:00}", e[x][y]); + } + Console::WriteLine(); + } +} diff --git a/Chapter02/Boolean.cpp b/Chapter02/Boolean.cpp new file mode 100644 index 0000000..9e59c3a --- /dev/null +++ b/Chapter02/Boolean.cpp @@ -0,0 +1,15 @@ +using namespace System; + +// Boolean Fundamental Type in Action +void main() +{ + bool a = 18757; // will give a warning but set to true + bool b = 0; // false + bool c = true; // obviously true + bool d = false; // obviously false + + Console::WriteLine( a ); + Console::WriteLine( b ); + Console::WriteLine( c ); + Console::WriteLine( d ); +} diff --git a/Chapter02/BooleanLiteral.cpp b/Chapter02/BooleanLiteral.cpp new file mode 100644 index 0000000..e9d8cea --- /dev/null +++ b/Chapter02/BooleanLiteral.cpp @@ -0,0 +1,15 @@ +using namespace System; + +// Boolean Literals in Action +void main() +{ + bool isTrue = true; + bool isFalse = false; + + Console::WriteLine ( isTrue ); + Console::WriteLine ( isFalse ); + + // This is kind of neat. Boolean literals are objects too! + Console::WriteLine ( true.ToString () ); + Console::WriteLine ( false.ToString () ); +} diff --git a/Chapter02/Boxing.cpp b/Chapter02/Boxing.cpp new file mode 100644 index 0000000..1eab786 --- /dev/null +++ b/Chapter02/Boxing.cpp @@ -0,0 +1,32 @@ +using namespace System; + +// Boxing in Action +value class POINT +{ +public: + int x, y; + POINT(int x, int y) : x(x) , y(y) {} +}; + +void main() +{ + POINT p1(1,2); + Object ^o = p1; + POINT ^p2 = (POINT)o; + POINT ^p3 = (POINT^)o; + + Console::WriteLine("p1 x={0} y={1}\n", p1.x, p1.y); + Console::WriteLine("o x={0} y={1}\n", ((POINT)o).x, ((POINT)o).y); + Console::WriteLine("p2 x={0} y={1}\n", p2->x, p2->y); + Console::WriteLine("p3 x={0} y={1}\n", p3->x, p3->y); + + Console::WriteLine("-------"); + + p3->x = 3; + p3->y = 4; + + Console::WriteLine("p1 x={0} y={1}\n", p1.x, p1.y); + Console::WriteLine("o x={0} y={1}\n", ((POINT)o).x, ((POINT)o).y); + Console::WriteLine("p2 x={0} y={1}\n", p2->x, p2->y); + Console::WriteLine("p3 x={0} y={1}\n", p3->x, p3->y); +} \ No newline at end of file diff --git a/Chapter02/BuildAll.bat b/Chapter02/BuildAll.bat new file mode 100644 index 0000000..3bb4314 --- /dev/null +++ b/Chapter02/BuildAll.bat @@ -0,0 +1,18 @@ +cl Arrays.cpp /clr:safe +cl Boolean.cpp /clr:safe +cl BooleanLiteral.cpp /clr:safe +cl Boxing.cpp /clr:safe +cl CharLiteral.cpp /clr:safe +cl Chars.cpp /clr:safe +cl Decimal.cpp /clr:safe +cl Enums.cpp /clr:safe +cl FloatingPoint.cpp /clr:safe +cl Hello.cpp /clr:safe +cl IntegerLiteral.cpp /clr:safe +cl IntegerTypes.cpp /clr:safe +cl MainArgsNew.cpp /clr:safe +cl MainArgsTrad.cpp /clr:pure +cl ReferenceIndirect.cpp /clr:pure +cl StringFun.cpp /clr:safe +cl StringLiteral.cpp /clr:safe +cl ValueClass.cpp /clr:safe diff --git a/Chapter02/CharLiteral.cpp b/Chapter02/CharLiteral.cpp new file mode 100644 index 0000000..31a2ef4 --- /dev/null +++ b/Chapter02/CharLiteral.cpp @@ -0,0 +1,21 @@ +using namespace System; + +// Character Literals in Action +void main() +{ + char a = 'a'; // character 'a' + Char b = L'b'; // Unicode 'b' + + char t = '\t'; // tab escape + Char s = L'\\'; // Unicode backslash escape + + char d = '\45'; // octal escape + Char e = L'\x0045'; // Unicode hexadecimal escape + + Console::WriteLine ( a ); // displays numeric equiv of 'A' + Console::WriteLine ( b ); // displays the letter 'b' + Console::WriteLine ( t ); // displays numeric equiv of tab + Console::WriteLine ( s ); // displays backslash + Console::WriteLine ( d ); // displays decimal equiv of octal 45 + Console::WriteLine ( e ); // displays the letter 'e' +} diff --git a/Chapter02/Chars.cpp b/Chapter02/Chars.cpp new file mode 100644 index 0000000..7beba5e --- /dev/null +++ b/Chapter02/Chars.cpp @@ -0,0 +1,12 @@ +using namespace System; + +// Character Fundamental Type in Action +void main() +{ + Char a = L'A'; // character literal 'A' + Char b = L'\x0041'; // hex notation for hex 41 which happens to be 'A' + + Console::WriteLine ( a ); + Console::WriteLine ( b ); //Even though I put hex 41 in b, the ASCII 'A' + //is printed due to b being a Char +} diff --git a/Chapter02/Decimal.cpp b/Chapter02/Decimal.cpp new file mode 100644 index 0000000..38212e0 --- /dev/null +++ b/Chapter02/Decimal.cpp @@ -0,0 +1,39 @@ +using namespace System; + +// Decimal Fundamental Type in Action +void main() +{ + Decimal w = System::Convert::ToDecimal("123456789012345678901.2345678"); + Console::WriteLine( w ); + + Decimal x = (Decimal)0.1234567890123456789012345678; // will get truncated + Decimal y = (Decimal)0.0000000000000000789012345678; // works fine + + Console::WriteLine( x ); + Console::WriteLine( y ); + + // Decimal constructor + Decimal z(0xeb1f0ad2, 0xab54a98c, 0, false, 0); // = 12345678901234567890 + Console::WriteLine( z ); + + // Create a 28 significate digit number + Decimal a = (Decimal)123456789012345000000.00000000; + Decimal b = (Decimal)678901.23456780; + Decimal c = -(a + b); + + Console::WriteLine( c ); // display pre broken Decimal + + // Break it up into 4 parts + array^ d = Decimal::GetBits(c); + + // Reassemble using Decimal constructor + Decimal e(d[0], d[1], d[2], // digits + ((d[3] & 0x80000000) == 0x80000000), // sign + ((d[3] >> 16) & 0xff) ); // decimal location + + Console::WriteLine( d[0] ); // display part 1 + Console::WriteLine( d[1] ); // display part 2 + Console::WriteLine( d[2] ); // display part 3 + Console::WriteLine( d[3].ToString("X") ); // display part 4 + Console::WriteLine( e ); // display reassembled Decimal +} diff --git a/Chapter02/Enums.cpp b/Chapter02/Enums.cpp new file mode 100644 index 0000000..5746626 --- /dev/null +++ b/Chapter02/Enums.cpp @@ -0,0 +1,26 @@ +using namespace System; + +enum class PrimeColors { Red, Blue, Yellow }; + +// Enum Type in Action +void main() +{ + PrimeColors color; + + color = PrimeColors::Blue; + + switch (color) + { + case PrimeColors::Red : + Console::WriteLine("Red"); + break; + case PrimeColors::Blue : + Console::WriteLine("Blue"); + break; + case PrimeColors::Yellow : + Console::WriteLine("Yellow"); + break; + } + + Console::WriteLine(color.ToString()); +} diff --git a/Chapter02/FloatingPoint.cpp b/Chapter02/FloatingPoint.cpp new file mode 100644 index 0000000..543c672 --- /dev/null +++ b/Chapter02/FloatingPoint.cpp @@ -0,0 +1,15 @@ +using namespace System; + +// Floating-point Fundamental Types in Action +void main() +{ + float w = 123.456f; // standard decimal notation + float x = 7890e3f; // exponent notation + double y = 34525425432525764765.76476476547654; // too big will truncate + double z = 123456789012345e-300; // exponent will be reset + + Console::WriteLine( w ); // Write out Single + Console::WriteLine( x ); // Write out Single with more zeros + Console::WriteLine( y ); // Write out Double truncated + Console::WriteLine( z ); // Write out Double shift back decimal +} diff --git a/Chapter02/Hello.cpp b/Chapter02/Hello.cpp new file mode 100644 index 0000000..1251f0e --- /dev/null +++ b/Chapter02/Hello.cpp @@ -0,0 +1,7 @@ +using namespace System; + +// The Obligatory Hello World! +void main(void) +{ + Console::WriteLine("Hello C++/CLI World"); +} \ No newline at end of file diff --git a/Chapter02/IntegerLiteral.cpp b/Chapter02/IntegerLiteral.cpp new file mode 100644 index 0000000..69daeba --- /dev/null +++ b/Chapter02/IntegerLiteral.cpp @@ -0,0 +1,15 @@ +using namespace System; + +// Integer Literals in Action +void main() +{ + Console::WriteLine ( 010 ); // An Octal 10 is a base-10 8 + Console::WriteLine ( -010 ); // Negative Octal 10 is a base-10 -8 + + Console::WriteLine ( 0x10 ); // A Hex 10 is a base-10 16 + Console::WriteLine ( -0x10 ); // Negative Hex 10 is a base-10 -16 + + // This is kind of neat. Number literals are objects too! + Console::WriteLine ( (1234567890).ToString() ); + Console::WriteLine ( (0xABCDEF).ToString("X") ); +} diff --git a/Chapter02/IntegerTypes.cpp b/Chapter02/IntegerTypes.cpp new file mode 100644 index 0000000..524b090 --- /dev/null +++ b/Chapter02/IntegerTypes.cpp @@ -0,0 +1,18 @@ +using namespace System; + +// Integer Fundamental Types in Action +void main() +{ + char v = 'F'; // Intialize using charater literal + short w(123); // Intializing using Functional Notation + int x = 456789; // Decimal literal assigned + long y = 987654321l; // long integer literal assigned + Int64 z = 0xFEDCBA9876543210; // Hex literal assigned + + Console::WriteLine( v ); // Write out a char + Console::WriteLine( w ); // Write out a short + Console::WriteLine( x ); // Write out a int + Console::WriteLine( y ); // Write out a long + Console::WriteLine( z ); // Write out a Int64 + Console::WriteLine( z.ToString("x") ); // Write out a Int64 in Hex +} diff --git a/Chapter02/MainArgsNew.cpp b/Chapter02/MainArgsNew.cpp new file mode 100644 index 0000000..806569d --- /dev/null +++ b/Chapter02/MainArgsNew.cpp @@ -0,0 +1,14 @@ +using namespace System; + +// Passing parameters to main() new method +int main(array ^args) +{ + Console::WriteLine(args->Length); + + for each (String^ s in args) + { + Console::WriteLine(s); + } + return 0; +} + diff --git a/Chapter02/MainArgsTrad.cpp b/Chapter02/MainArgsTrad.cpp new file mode 100644 index 0000000..7e1a476 --- /dev/null +++ b/Chapter02/MainArgsTrad.cpp @@ -0,0 +1,12 @@ +using namespace System; + +// Passing parameters to main() +int main ( int argc, char *argv[] ) +{ + Console::WriteLine ( argc.ToString() ); + for (int i = 0; i < argc; i++) + { + Console::WriteLine ( gcnew String(argv[i]) ); + } + return 0; +} diff --git a/Chapter02/ReferenceIndirect.cpp b/Chapter02/ReferenceIndirect.cpp new file mode 100644 index 0000000..f5395f1 --- /dev/null +++ b/Chapter02/ReferenceIndirect.cpp @@ -0,0 +1,38 @@ +using namespace System; + +ref class RefClass +{ +public: + int X; + + RefClass(int x) + { + X = x; + } +}; + +// Reference and Indirection in Action +void main() +{ + RefClass rc(10); + RefClass ^o; + + o = %rc; // place a reference of rc in the handle o + Console::WriteLine(o->X); // print out object. This should contain 10. + + rc.X = 20; // place 50 at the address y points to + Console::WriteLine(o->X); // print out object. This should contain 20. + + int %i = rc.X; // assign rc.X to a reference + + i = 30; // change value of reference + Console::WriteLine(o->X); // print out object. This should contain 30. + + Console::WriteLine(); + + int ^y = gcnew int(100); // create a handle to an int + Console::WriteLine(y); // print out int. + + *y = 110; // Assign new value to dereferenced int + Console::WriteLine(*y); // print out dereferenced int. +} diff --git a/Chapter02/StringFun.cpp b/Chapter02/StringFun.cpp new file mode 100644 index 0000000..e84755f --- /dev/null +++ b/Chapter02/StringFun.cpp @@ -0,0 +1,29 @@ +using namespace System; + +// String Type in Action +void main() +{ + // Create some strings + String^ s1 = "This will "; + String^ s2 = "be a "; + String^ s3 = "String"; + Console::WriteLine(String::Concat(s1, s2, s3)); + + // Create a copy, then concatenate new text + String^ s4 = s2; + s4 = String::Concat(s4, "new "); + Console::WriteLine(String::Concat(s1, s4, s3)); + + // Replace stuff in a concatenated string + String^ s5 = String::Concat(s1, s2, s3)->Replace("i", "*"); + Console::WriteLine(s5); + + // Insert into a string + String^ s6 = s3->Insert(3, "ange Str"); + Console::WriteLine(String::Concat(s1, s2, s6)); + + // Remove text from strings + s1 = s1->Remove(4, 5); // remove ' will' from middle + s2 = s2->Remove(0, 3); // remove 'be ' from start + Console::WriteLine(String::Concat(s1, "is ", s2, s3)); +} diff --git a/Chapter02/StringLiteral.cpp b/Chapter02/StringLiteral.cpp new file mode 100644 index 0000000..8f54540 --- /dev/null +++ b/Chapter02/StringLiteral.cpp @@ -0,0 +1,11 @@ +using namespace System; + +// String Literals in Action +void main() +{ + String^ a = "Managed String"; + String^ b = L"Unicode String"; + + Console::WriteLine(a); + Console::WriteLine(b); +} diff --git a/Chapter02/ValueClass.cpp b/Chapter02/ValueClass.cpp new file mode 100644 index 0000000..240d9f2 --- /dev/null +++ b/Chapter02/ValueClass.cpp @@ -0,0 +1,39 @@ +using namespace System; + +// Value class in Action +value class Coord3D +{ +public: + double x; + double y; + double z; + + Coord3D (double x, double y, double z) + { + this->x = x; + this->y = y; + this->z = z; + } + + String^ Write() + { + return String::Format("{0},{1},{2}", x, y, z); + } +}; + +void main() +{ + Coord3D coordA; + Coord3D coordB(1,2,3); + + coordA = coordB; // Assign is simply an = + + coordA.x += 5.5; // Operations work just like usual + coordA.y *= 2.7; + coordA.z /= 1.3; + + Console::WriteLine(coordB.Write()); + Console::WriteLine(coordA.x); + Console::WriteLine(coordA.y); + Console::WriteLine(coordA.z); +} diff --git a/Chapter03/AbstractEx.cpp b/Chapter03/AbstractEx.cpp new file mode 100644 index 0000000..9dd2511 --- /dev/null +++ b/Chapter03/AbstractEx.cpp @@ -0,0 +1,57 @@ +using namespace System; + + ref class AbstractExClass abstract +{ +protected: + int AbstractVar; + AbstractExClass(int val): AbstractVar(val) {} +public: + virtual void Method1() = 0; // unimplemented method + virtual void Method2() = 0; // unimplemented method + void Method3() + { + Console::WriteLine(AbstractVar.ToString()); + } +}; + +ref class MidAbstractExClass abstract : public AbstractExClass +{ +public: + virtual void Method1() override sealed + { + Console::WriteLine((AbstractVar * 3).ToString()); + } +protected: + MidAbstractExClass(int val) : AbstractExClass(val) {} +}; + +ref class DerivedExClass : public MidAbstractExClass +{ +public: + DerivedExClass(int val) : MidAbstractExClass(val) {} + virtual void Method2() override + { + Console::WriteLine((AbstractVar * 2).ToString()); + } +}; + +void testMethod(AbstractExClass ^aec) +{ + aec->Method1(); + aec->Method2(); + aec->Method3(); +} + +void main() +{ + AbstractExClass ^Ab1 = gcnew DerivedExClass(5); + Ab1->Method1(); + Ab1->Method2(); + Ab1->Method3(); + + AbstractExClass ^Ab2 = gcnew DerivedExClass(6); + testMethod(Ab2); + + DerivedExClass ^dc = gcnew DerivedExClass(7); + testMethod(dc); +} diff --git a/Chapter03/ArrayProp.cpp b/Chapter03/ArrayProp.cpp new file mode 100644 index 0000000..934cd22 --- /dev/null +++ b/Chapter03/ArrayProp.cpp @@ -0,0 +1,36 @@ +using namespace System; + +ref class ArrayProp +{ +public: + ArrayProp(int size) + { + numArray = gcnew array(size); + } + + property array^ NumArray + { + array^ get() + { + return numArray; + } + + void set ( array^ value ) + { + numArray = value; + } + } +private: + array^ numArray; +}; + +void main() +{ + ArrayProp aprop(5); + + for ( int i = 0 ; i < aprop.NumArray->Length ; ++i ) + aprop.NumArray[i] = i; + + for each (int i in aprop.NumArray) + Console::WriteLine(i); +} diff --git a/Chapter03/BuildAll.bat b/Chapter03/BuildAll.bat new file mode 100644 index 0000000..62cb412 --- /dev/null +++ b/Chapter03/BuildAll.bat @@ -0,0 +1,17 @@ +cl AbstractEx.cpp /clr:safe +cl ArrayProp.cpp /clr:safe +cl Casting.cpp /clr +cl Constructors.cpp /clr:safe +cl DefIndexProps.cpp /clr:safe +cl IndexProps.cpp /clr:safe +cl Inherit.cpp /clr:safe +cl InterfaceEx.cpp /clr:safe +cl MethodEx.cpp /clr:safe +cl NestedClass.cpp /clr:safe +cl OperatorOverload.cpp /clr:safe +cl OperatorOverloadMixed.cpp /clr:safe +cl ScalarProp.cpp /clr:safe +cl StackReferences.cpp /clr:safe +cl StaticMethodEx.cpp /clr:safe +cl StaticProp.cpp /clr:safe +cl VirtualAnimals.cpp /clr:safe diff --git a/Chapter03/Casting.cpp b/Chapter03/Casting.cpp new file mode 100644 index 0000000..22212a9 --- /dev/null +++ b/Chapter03/Casting.cpp @@ -0,0 +1,33 @@ +using namespace System; + +ref class A {}; +ref class B : public A {}; +ref class C {}; + +void main() +{ + Object ^v1 = gcnew A(); + Object ^v2 = gcnew B(); + Object ^v3 = gcnew C(); + + A ^a1 = gcnew A(); + A ^a2 = gcnew B(); + A ^a3 = dynamic_cast(v1); // downcast + A ^a4 = dynamic_cast(v2); // downcast + A ^a5 = static_cast(v3); // a5 has invalid value of type C class + + B ^b1 = gcnew B(); + B ^b2 = dynamic_cast(v2); // downcast + B ^b3 = dynamic_cast(v3); // Fails b3 = null. Miss match classes + B ^b4 = dynamic_cast(a2); // downcast + + C ^c1 = gcnew C(); + C ^c2 = dynamic_cast(v1); // Fails c2 = null. Miss match classes + C ^c3 = static_cast(v2); // c3 has invalid value of type B class + C ^c4 = safe_cast(v3); // downcast + + C ^c5 = (C^)(v3); // downcast + +// B ^e1 = safe_cast(c1); // does not compile as compiler knows these + // are unrelated handles. +} \ No newline at end of file diff --git a/Chapter03/Constructors.cpp b/Chapter03/Constructors.cpp new file mode 100644 index 0000000..6d23ee0 --- /dev/null +++ b/Chapter03/Constructors.cpp @@ -0,0 +1,53 @@ +using namespace System; + +// Parent Class +ref class ParentClass +{ +public: + // Default constructor that initializes ParentVal to a default value + ParentClass() : PVal(10) {} + + // A constructor that initializes ParentVal to a passed value + ParentClass(int inVal) : PVal(inVal) {} + + // Copy Constructor + ParentClass(const ParentClass %p) : PVal(p.PVal) {} + + int PVal; +}; + +// --------------------------------------------------------------- + +// Child class that inherits form ParentClass +ref class ChildClass : public ParentClass +{ +public: + // Default constructor that initializes ChildVal to a default value + ChildClass () : CVal(20) {}; // default constructor + + // A constructor that initialized the parent class with a passed value + // and initializes ChildVal to a another passed value + ChildClass (int inVal1, int inVal2) : ParentClass(inVal1), CVal(inVal2) {} + + ChildClass(const ChildClass %vals) : ParentClass(vals.PVal), CVal(vals.CVal) {} + + int CVal; +}; + +void main() +{ + ParentClass p1(4); // Constructor + ParentClass p2 = p1; // Copy Constructor + + p1.PVal = 2; // Change original, new unchanged + + Console::WriteLine("p1.PVal=[{0}] p2.PVal=[{1}]", p1.PVal, p2.PVal); + + ChildClass ^c1 = gcnew ChildClass(5,6); // Constructor + ChildClass c2 = *c1; // Copy Constructor + + c1->CVal = 12; // Change original, new unchanged + + Console::WriteLine("c1=[{0}/{1}] c2=[{2}/{3}]", + c1->PVal, c1->CVal, c2.PVal, c2.CVal); +} diff --git a/Chapter03/DefIndexProps.cpp b/Chapter03/DefIndexProps.cpp new file mode 100644 index 0000000..3e61bb3 --- /dev/null +++ b/Chapter03/DefIndexProps.cpp @@ -0,0 +1,37 @@ +using namespace System; + +ref class Numbers +{ +public: + Numbers() + { + defaultArray = gcnew array + { + "zero", "one", "two", "three", "four", "five" + }; + } + + property String^ default [int] + { + String^ get(int index) + { + if (index < 0) + index = 0; + else if (index > defaultArray->Length) + index = defaultArray->Length - 1; + + return defaultArray[index]; + } + } +private: + array^ defaultArray; +}; + +void main() +{ + Numbers numbers; + + Console::WriteLine(numbers[-1]); + Console::WriteLine(numbers[3]); + Console::WriteLine(numbers[10]); +} \ No newline at end of file diff --git a/Chapter03/IndexProps.cpp b/Chapter03/IndexProps.cpp new file mode 100644 index 0000000..1a0a6a1 --- /dev/null +++ b/Chapter03/IndexProps.cpp @@ -0,0 +1,65 @@ +using namespace System; + +ref class Student +{ +public: + Student(String^ s, int g) + { + Name = s; + Grade = g; + } + + property String^ Name; + property int Grade; +}; + +ref class Course +{ + ref struct StuList + { + Student ^stu; + StuList ^next; + }; + StuList ^Stu; + static StuList ^ReportCards = nullptr; + +public: + property Student^ ReportCard [String^] + { + Student^ get(String^ n) + { + for(Stu = ReportCards; Stu && (Stu->stu->Name != n); Stu = Stu->next) + ; + if (Stu != nullptr) + return Stu->stu; + else + return gcnew Student("",0); // empty student + } + + void set(String^ n, Student^ s) + { + for(Stu = ReportCards; Stu && (Stu->stu->Name != n); Stu = Stu->next) + ; + if (Stu == nullptr) + { + StuList ^stuList = gcnew StuList; + stuList->stu = s; + stuList->next = ReportCards; + ReportCards = stuList; + } + } + } +}; + +void main() +{ + Course EnglishLit; + Student Stephen("Stephen", 95); // student as stack variable + Student ^Sarah = gcnew Student("Sarah", 98); // student as heap variable + + EnglishLit.ReportCard[ "Stephen" ] = %Stephen; // index as String literal + EnglishLit.ReportCard[ Sarah->Name ] = Sarah; // index as String^ + + Console::WriteLine(EnglishLit.ReportCard[ Stephen.Name ]->Grade); + Console::WriteLine(EnglishLit.ReportCard[ "Sarah" ]->Grade); +} \ No newline at end of file diff --git a/Chapter03/Inherit.cpp b/Chapter03/Inherit.cpp new file mode 100644 index 0000000..d1bb26b --- /dev/null +++ b/Chapter03/Inherit.cpp @@ -0,0 +1,34 @@ +using namespace System; + +/// Base class +ref class Square +{ +public: + int Area() + { + return Dims * Dims; + } + + int Dims; +}; + +/// Child class +ref class Cube : public Square +{ +public: + int Volume() + { + return Area() * Dims; + } +}; + +/// Inheritance in action +void main() +{ + Cube ^cube = gcnew Cube(); + cube->Dims = 3; + + Console::WriteLine(cube->Dims); + Console::WriteLine(cube->Area()); + Console::WriteLine(cube->Volume()); +} diff --git a/Chapter03/InterfaceEx.cpp b/Chapter03/InterfaceEx.cpp new file mode 100644 index 0000000..182ace9 --- /dev/null +++ b/Chapter03/InterfaceEx.cpp @@ -0,0 +1,75 @@ +using namespace System; + +interface class Interface1 +{ + void Method1(); + void Method2(); +}; + +interface class Interface2 +{ + void Method3(); + property String^ X; +}; + +ref class Base +{ +public: + void MethodBase() + { + Console::WriteLine("MethodBase()"); + } +}; + +ref class DerivedClass : public Base, public Interface1, public Interface2 +{ +public: + virtual property String^ X + { + String^ get() + { + return x; + } + + void set(String^ value) + { + x = value; + } + } + + virtual void Method1() + { + Console::WriteLine("Method1()"); + } + + virtual void Method2() + { + Console::WriteLine("Method2()"); + } + + virtual void Method3() + { + Console::WriteLine("Method3()"); + } + + virtual void Print() + { + MethodBase(); + Method1(); + Method2(); + Method3(); + } + +private: + String^ x; +}; + +void main() +{ + DerivedClass dc; + + dc.X = "Start'n Up"; + Console::WriteLine(dc.X); + + dc.Print(); +} diff --git a/Chapter03/MethodEx.cpp b/Chapter03/MethodEx.cpp new file mode 100644 index 0000000..678ee31 --- /dev/null +++ b/Chapter03/MethodEx.cpp @@ -0,0 +1,40 @@ +using namespace System; + +ref class MethodEx +{ +public: + void printPublic(int num) + { + for (int i = 0; i < num; i++) + { + Console::WriteLine( "Public" ); + } + printProtected(num/2); + } +protected: + void printProtected(int num) + { + for (int i = 0; i < num; i++) + { + Console::WriteLine( "Protected" ); + } + printPrivate(num/2); + } +private: + void printPrivate(int num) + { + for (int i = 0; i < num; i++) + { + Console::WriteLine( "Private" ); + } + } +}; + +int main() +{ + MethodEx ex; + + ex.printPublic(4); + // ex.printProtected(4); // Error can not access + // ex.printPrivate(4); // Error can not access +} diff --git a/Chapter03/NestedClass.cpp b/Chapter03/NestedClass.cpp new file mode 100644 index 0000000..2833084 --- /dev/null +++ b/Chapter03/NestedClass.cpp @@ -0,0 +1,74 @@ +using namespace System; + +ref class SurroundClass +{ +public: + ref class NestedClass // Declaration of the nested class + { + public: + int publicMember; + protected: + int protectedMember; + private: + int privateMember; + }; + + NestedClass^ protectedNC; // protected variable reference to NestedClass + +private: + NestedClass^ privateNC; // private variable reference to NestedClass + +public: + NestedClass^ publicNC; // public variable reference to NestedClass + + // Constructor for SurroundClass + // Notice the initializer list declaration of the reference member variable + SurroundClass() : publicNC(gcnew NestedClass), + protectedNC(gcnew NestedClass), + privateNC(gcnew NestedClass) + {} + + // A member showing how to access NestedClass within SurroundClass + // Notice only public member varibles of the nested class are accessed + // The private and protected are hidden + void method() + { + int x; + + NestedClass nc1; // Declared another reference NestedClass + + x = nc1.publicMember; // Accessing new NestedClass variable + + x = publicNC->publicMember; // Accessing public NestedClass variable + x = protectedNC->publicMember;// Accessing protected NestedClass variable + x = privateNC->publicMember; // Accessing private NestedClass variable + } +}; + +// A inhertied class showing how to access NestedClass within a member method +// Notice only public and protected NestedClass are accessed +// The private is hidden +ref class inheritSurroundClass : public SurroundClass +{ +public: + void method() + { + int x; + + NestedClass nc1; // can access because NestedClass + // declaration protected + x = nc1.publicMember; + + x = publicNC->publicMember; + x = protectedNC->publicMember; + } +}; + +// The main function shows how to access NestedClass from outside SurroundClass +// inhertance tree +// Notice only the public NestedClass reference is accessible +void main() +{ + SurroundClass sc; + int x = sc.publicNC->publicMember; +} diff --git a/Chapter03/OperatorOverload.cpp b/Chapter03/OperatorOverload.cpp new file mode 100644 index 0000000..8c5d9e3 --- /dev/null +++ b/Chapter03/OperatorOverload.cpp @@ -0,0 +1,76 @@ +using namespace System; + +ref class OpClass +{ +public: + OpClass() : i(0) {} + OpClass(int x) : i(x) {} + + // x != y + static bool operator !=(const OpClass ^lhs, const OpClass ^rhs) + { + return lhs->i != rhs->i; + } + + // x * y + static OpClass^ operator *(const OpClass ^lhs, const OpClass ^rhs) + { + OpClass^ ret = gcnew OpClass(); + ret->i = lhs->i * rhs->i; + + return ret; + } + + // x *= y + static void operator *=(OpClass ^lhs, const OpClass ^rhs) + { + lhs->i *= rhs->i; + } + + // -x + static OpClass^ operator -(const OpClass ^lhs) + { + OpClass^ ret = gcnew OpClass(); + ret->i = -(lhs->i); + + return ret; + } + + // ++x and x++ + static OpClass^ operator ++(const OpClass ^lhs) + { + OpClass^ ret = gcnew OpClass(); + ret->i = (lhs->i) + 1; + + return ret; + } + + virtual String ^ ToString() override + { + return i.ToString(); + } + +private: + int i; +}; + +void main() +{ + OpClass ^op1 = gcnew OpClass(3); + OpClass ^op2 = gcnew OpClass(5); + OpClass ^op3 = gcnew OpClass(15); + + if ( op1 * op2 != op3) + Console::WriteLine("Don't Equal"); + else + Console::WriteLine("Equal"); + + op1 *= op2; + Console::WriteLine(op1); + + Console::WriteLine(++op1); // prints 15 then increments to 16 + Console::WriteLine(op1++); // increOpClassents to 17 then prints + + Console::WriteLine(-op1); // Negation of OpClass1 + Console::WriteLine(op1); // prior Negation op left OpClass1 unchanged +} diff --git a/Chapter03/OperatorOverloadMixed.cpp b/Chapter03/OperatorOverloadMixed.cpp new file mode 100644 index 0000000..d3918f3 --- /dev/null +++ b/Chapter03/OperatorOverloadMixed.cpp @@ -0,0 +1,38 @@ +using namespace System; + +ref class Number +{ +public: + Number(int x) : i(x) {} + + static bool operator >(Number^ n, int v) // maps to operator > + { + return n->i > v; + } + static bool operator >(int v, Number^ n) // maps to operator > + { + return v > n->i; + } + + virtual String ^ ToString() override + { + return i.ToString(); + } +private: + int i; +}; + +int main() +{ + Number^ n = gcnew Number(5); + + if ( n > 6 ) + Console::WriteLine("{0} Greater than 6", n); + else + Console::WriteLine("{0} Less than or Equal 6", n); + + if ( 6 > n ) + Console::WriteLine("6 Greater than {0}", n); + else + Console::WriteLine("6 Less than or Equal {0}", n); +} diff --git a/Chapter03/ScalarProp.cpp b/Chapter03/ScalarProp.cpp new file mode 100644 index 0000000..f0b9e84 --- /dev/null +++ b/Chapter03/ScalarProp.cpp @@ -0,0 +1,81 @@ +using namespace System; + +ref class ScalarProp +{ +public: + // Constructor + ScalarProp() + { + Cost = 0.0; + number = 0; + name = "Blank Name"; + description = "Scalar Property"; + } + + // trivial property + property double Cost; + + // Read & write with validated parameter + property int Number + { + void set(int value) + { + if (value < 1) + value = 1; + else if (value > 10) + value = 10; + + number = value; + } + + int get() + { + return number; + } + } + + // Write only property + property String^ Name + { + void set(String^ value) + { + name = value; + } + } + + // Ready only property + property String ^Description + { + String^ get() + { + return String::Concat(name, " ", description); + } + } + +private: + String ^name; + String ^description; + int number; +}; + + +void main() +{ + ScalarProp sp; + + sp.Name = "The Ref Class"; + + Console::WriteLine(sp.Description); + + sp.Cost = 123.45; + Console::WriteLine(sp.Cost); + + sp.Number = 20; // Will be changed to 10 + Console::WriteLine(sp.Number); + + sp.Number = -5; // Will be changed to 1 + Console::WriteLine(sp.Number); + + sp.Number = 6; // Will not change + Console::WriteLine(sp.Number); +} \ No newline at end of file diff --git a/Chapter03/StackReferences.cpp b/Chapter03/StackReferences.cpp new file mode 100644 index 0000000..cfd2164 --- /dev/null +++ b/Chapter03/StackReferences.cpp @@ -0,0 +1,23 @@ +using namespace System; + +ref class Square +{ +public: + int Area() + { + return Dims * Dims; + } + + int Dims; +}; + +void main() +{ + Square ^sqr1 = gcnew Square(); // Handle + sqr1->Dims = 2; + Console::WriteLine( sqr1->Area() ); + + Square sqr2; // local stack instance + sqr2.Dims = 3; + Console::WriteLine( sqr2.Area() ); +} diff --git a/Chapter03/StaticMethodEx.cpp b/Chapter03/StaticMethodEx.cpp new file mode 100644 index 0000000..165dbfe --- /dev/null +++ b/Chapter03/StaticMethodEx.cpp @@ -0,0 +1,17 @@ +using namespace System; + +ref class StaticTest +{ +private: + static int x = 42; +public: + static int get_x() + { + return x; + } +}; + +void main() +{ + Console::WriteLine ( StaticTest::get_x() ); +} \ No newline at end of file diff --git a/Chapter03/StaticProp.cpp b/Chapter03/StaticProp.cpp new file mode 100644 index 0000000..6751d11 --- /dev/null +++ b/Chapter03/StaticProp.cpp @@ -0,0 +1,26 @@ +using namespace System; + +ref class StaticProp +{ + static String^ name; + +public: + property static String^ Name + { + void set(String^ value) + { + name = value; + } + String^ get() + { + return name; + } + } +}; + +int main() +{ + StaticProp::Name = "Static Property"; + + Console::WriteLine(StaticProp::Name); +} \ No newline at end of file diff --git a/Chapter03/VirtualAnimals.cpp b/Chapter03/VirtualAnimals.cpp new file mode 100644 index 0000000..4c99d9f --- /dev/null +++ b/Chapter03/VirtualAnimals.cpp @@ -0,0 +1,83 @@ +using namespace System; + +ref class Animal +{ +public: + virtual void Speak () + { + Console::WriteLine("Animal is Mysteriously Silent"); + } +}; + +ref class Dog : public Animal +{ +public: + // Standard explicit virtual override + virtual void Speak() override + { + Console::WriteLine("Dog says Woof"); + } +}; + +ref class Puppy : public Dog +{ +public: + // Yip name overrides dog's virtual speak + virtual void Yip() = Dog::Speak // should be just: = Speak + { + Console::WriteLine("Puppy says Yip Yip"); + } +}; + +ref class Cat : public Animal +{ +public: + // Start a new speak virtual sequence so animal's virtual speak fails + virtual void Speak() new + { + Console::WriteLine("Cat says Meow"); + } +}; + +ref class Tiger : public Cat +{ +public: + // Though inherited from cat, Tiger name overrides Animal's speak + // thus, can speak though animal virtual sequence + // also this method overrides Cat’s virtual Speak method as well + virtual void Growl() = Animal::Speak, Cat::Speak + { + Console::WriteLine("Tiger says Grrrr"); + } +}; + +void main() +{ + // Array of Animal handles + array^ animals = gcnew array + { + gcnew Animal(), + gcnew Dog(), + gcnew Puppy(), + gcnew Cat(), + gcnew Tiger() + }; + + for each ( Animal ^a in animals) + { + a->Speak(); + } + + Console::WriteLine(); + + Animal^ cat1 = gcnew Cat(); + Cat^ cat2 = gcnew Cat(); + Cat^ tiger = gcnew Tiger(); + + // new cancels virtual sequence of Animal + cat1->Speak(); + + // new speak sequence established for cat + cat2->Speak(); + tiger->Speak(); +} diff --git a/Chapter04/BuildAll.bat b/Chapter04/BuildAll.bat new file mode 100644 index 0000000..70715f4 --- /dev/null +++ b/Chapter04/BuildAll.bat @@ -0,0 +1,18 @@ +cd Cards +call BuildAll.bat + +cd ../PlayCards +call BuildAll.bat + +cd .. +cl CatchAll.cpp /clr +cl CatchException.cpp /clr:safe +cl Defined.cpp /clr:safe +cl Delegates.cpp /clr:safe +cl Events.cpp /clr:safe +cl Finally.cpp /clr:safe +cl Generics.cpp /clr:safe +cl MultiException.cpp /clr:safe +cl RethrowException.cpp /clr:safe +cl Templates.cpp /clr:safe +cl ThrowDerived.cpp /clr:safe diff --git a/Chapter04/Cards/BuildAll.bat b/Chapter04/Cards/BuildAll.bat new file mode 100644 index 0000000..0703ce3 --- /dev/null +++ b/Chapter04/Cards/BuildAll.bat @@ -0,0 +1 @@ +cl card.cpp deck.cpp /clr:safe /LD /FeCards.dll diff --git a/Chapter04/Cards/Card.cpp b/Chapter04/Cards/Card.cpp new file mode 100644 index 0000000..c106965 --- /dev/null +++ b/Chapter04/Cards/Card.cpp @@ -0,0 +1,58 @@ +using namespace System; + +#include "card.h" +using namespace Cards; + +Card::Card(int type, Suits suit) +{ + Type = type; + Suit = suit; +} + +int Card::Type::get() +{ + return type; +} + +void Card::Type::set(int value) +{ + type = value; +} + +Suits Card::Suit::get() +{ + return suit; +} + +void Card::Suit::set(Suits value) +{ + suit = value; +} + +String^ Card::ToString() +{ + String ^t; + + if (Type > 1 && Type < 11) + t = Type.ToString(); + else if (Type == 1) + t = "A"; + else if (Type == 11) + t = "J"; + else if (Type == 12) + t = "Q"; + else + t = "K"; + + switch (Suit) + { + case Suits::Heart: + return String::Concat(t, "H"); + case Suits::Diamond: + return String::Concat(t, "D"); + case Suits::Spade: + return String::Concat(t, "S"); + default: + return String::Concat(t, "C"); + } +} diff --git a/Chapter04/Cards/Card.h b/Chapter04/Cards/Card.h new file mode 100644 index 0000000..da35e6a --- /dev/null +++ b/Chapter04/Cards/Card.h @@ -0,0 +1,26 @@ +namespace Cards +{ + public enum class Suits { Heart, Diamond, Spade, Club }; + + public ref class Card + { + int type; + Suits suit; + + public: + Card(int type, Suits suit); + + property int Type + { + int get(); + void set(int value); + } + property Suits Suit + { + Suits get(); + void set(Suits value); + } + + virtual String^ ToString() override; + }; +} diff --git a/Chapter04/Cards/Deck.h b/Chapter04/Cards/Deck.h new file mode 100644 index 0000000..b091265 --- /dev/null +++ b/Chapter04/Cards/Deck.h @@ -0,0 +1,14 @@ +namespace Cards +{ + public ref class Deck + { + array^ deck; + int curCard; + + public: + Deck(void); + + Card ^Deal(); + void Shuffle(); + }; +} diff --git a/Chapter04/CatchAll.cpp b/Chapter04/CatchAll.cpp new file mode 100644 index 0000000..610d308 --- /dev/null +++ b/Chapter04/CatchAll.cpp @@ -0,0 +1,45 @@ +using namespace System; + +ref class MyDerivedException : public ApplicationException +{ +public: + MyDerivedException( String ^err ); +}; + +MyDerivedException::MyDerivedException(String ^err) : ApplicationException(err) +{ +} + + +ref class MyException // Not derived from Exception class +{ +}; + + +void main() +{ + for (int i = 0; i < 4; i++) + { + Console::WriteLine("Start Loop"); + try + { + if (i == 1) + throw gcnew ApplicationException("\tBase Exception"); + else if (i == 2) + throw gcnew MyDerivedException("\tMy Derived Exception"); + else if (i == 3) + throw gcnew MyException(); + + Console::WriteLine("\tNo Exception"); + } + catch (ApplicationException ^e) + { + Console::WriteLine(e->Message); + } + catch (...) + { + Console::WriteLine("\tMy Exception"); + } + Console::WriteLine("End Loop"); + } +} \ No newline at end of file diff --git a/Chapter04/CatchException.cpp b/Chapter04/CatchException.cpp new file mode 100644 index 0000000..63c00ca --- /dev/null +++ b/Chapter04/CatchException.cpp @@ -0,0 +1,20 @@ +using namespace System; + +ref class X {}; +ref class Y {}; + +void main() +{ + X ^x = gcnew X; + + try + { + Y ^y = (Y^)x; + Console::WriteLine("No Exception"); // Should not execute + } + catch (InvalidCastException ^e) + { + Console::WriteLine("Invalid Cast Exception"); + Console::WriteLine(e->StackTrace); + } +} \ No newline at end of file diff --git a/Chapter04/Defined.cpp b/Chapter04/Defined.cpp new file mode 100644 index 0000000..576af64 --- /dev/null +++ b/Chapter04/Defined.cpp @@ -0,0 +1,17 @@ +using namespace System; + +#define DISAPPEARS +#define ONE 1 +#define TWO 2 +#define POW2(x) (x)*(x) + +void main() +{ + Console::Write("The follow symbol disappears->" DISAPPEARS); + Console::WriteLine("<-"); + + Int32 x = TWO; + Int32 y = POW2(x + ONE); + + Console::WriteLine(y); +} \ No newline at end of file diff --git a/Chapter04/Delegates.cpp b/Chapter04/Delegates.cpp new file mode 100644 index 0000000..7bdc7b6 --- /dev/null +++ b/Chapter04/Delegates.cpp @@ -0,0 +1,69 @@ +using namespace System; + +/// A Delegate that talks a lot +delegate void SayDelegate(String ^name); + +/// A friendly function +void SayHello(String ^name) +{ + Console::Write("Hello there "); + Console::WriteLine(name); +} + +/// A talkative class +ref class Talkative +{ +public: + static void SayHi(String ^name); + void SayStuff(String ^name); + void SayBye(String ^name); +}; + +void Talkative::SayHi(System::String ^name) +{ + Console::Write("Hi there "); + Console::WriteLine(name); +} + +void Talkative::SayStuff(System::String ^name) +{ + Console::Write("Nice weather we are having. Right, "); + Console::Write(name); + Console::WriteLine("?"); +} + +void Talkative::SayBye(System::String ^name) +{ + Console::Write("Good-bye "); + Console::WriteLine(name); +} + +/// Delegates in action +void main() +{ + SayDelegate^ say; + + // Global Function + say = gcnew SayDelegate(&SayHello); + + // add Static member function + say += gcnew SayDelegate(&Talkative::SayHi); + + Talkative ^computer = gcnew Talkative(); + + // add instance member functions + say = say + gcnew SayDelegate(computer, &Talkative::SayStuff); + say += gcnew SayDelegate(computer, &Talkative::SayBye); + + // invoke delegate + say->Invoke("Stephen"); + + Console::WriteLine("-------------------------------"); + + // remove a couple of methods + say = say - gcnew SayDelegate(&Talkative::SayHi); + say -= gcnew SayDelegate(computer, &Talkative::SayBye); + + // invoke delegate again with two fewer methods + say("Stephen"); +} \ No newline at end of file diff --git a/Chapter04/Events.cpp b/Chapter04/Events.cpp new file mode 100644 index 0000000..a46deaa --- /dev/null +++ b/Chapter04/Events.cpp @@ -0,0 +1,87 @@ +using namespace System; + +delegate void SayHandler(String ^name); + +ref class EventSource +{ +public: + event SayHandler^ OnSay; + + void Say(String ^name) + { + OnSay(name); + } +}; + +ref class EventReceiver1 +{ + EventSource ^source; +public: + + EventReceiver1(EventSource ^src) + { + if (src == nullptr) + throw gcnew ArgumentNullException("Must pass an Event Source"); + + source = src; + + source->OnSay += gcnew SayHandler(this, &EventReceiver1::SayHello); + source->OnSay += gcnew SayHandler(this, &EventReceiver1::SayStuff); + } + + void RemoveStuff() + { + source->OnSay -= gcnew SayHandler(this, &EventReceiver1::SayStuff); + } + + void SayHello(String ^name) + { + Console::Write("Hello there "); + Console::WriteLine(name); + } + + void SayStuff(String ^name) + { + Console::Write("Nice weather we are having. Right, "); + Console::Write(name); + Console::WriteLine("?"); + } +}; + +ref class EventReceiver2 +{ + EventSource ^source; +public: + + EventReceiver2(EventSource ^src) + { + if (src == nullptr) + throw gcnew ArgumentNullException("Must pass an Event Source"); + + source = src; + + source->OnSay += gcnew SayHandler(this, &EventReceiver2::SayBye); + } + + void SayBye(String ^name) + { + Console::Write("Good-bye "); + Console::WriteLine(name); + } +}; + +void main() +{ + EventSource ^source = gcnew EventSource(); + + EventReceiver1 ^receiver1 = gcnew EventReceiver1(source); + EventReceiver2 ^receiver2 = gcnew EventReceiver2(source); + + source->Say("Mr Fraser"); + + Console::WriteLine("-------------------------------"); + + receiver1->RemoveStuff(); + + source->Say("Stephen"); +} \ No newline at end of file diff --git a/Chapter04/Finally.cpp b/Chapter04/Finally.cpp new file mode 100644 index 0000000..dc5c4c8 --- /dev/null +++ b/Chapter04/Finally.cpp @@ -0,0 +1,33 @@ +using namespace System; + +void main() +{ + for (int i = 0; i < 3; i++) + { + Console::WriteLine("Start Loop"); + try + { + if (i == 0) + { + Console::WriteLine("\tCounter = 0"); + } + else if (i == 1) + { + throw gcnew ApplicationException("\t*Exception* Counter = 1"); + } + else + { + Console::WriteLine("\tCounter > 1"); + } + } + catch (ApplicationException ^e) + { + Console::WriteLine(e->Message); + } + finally + { + Console::WriteLine("\tDone every time"); + } + Console::WriteLine("End Loop"); + } +} \ No newline at end of file diff --git a/Chapter04/Generics.cpp b/Chapter04/Generics.cpp new file mode 100644 index 0000000..f0153a4 --- /dev/null +++ b/Chapter04/Generics.cpp @@ -0,0 +1,49 @@ +using namespace System; + +// Generic Class ---------------------------------------- + +generic + where K : IComparable +ref class KVClass +{ +public: + property K Key; + property V Value; + KVClass(K key, V value); + + V isGreater(KVClass ^in); +}; + +generic +KVClass::KVClass(K key, V value) +{ + Key = key; + Value = value; +} + + +generic + where K : IComparable +V KVClass::isGreater(KVClass ^in) +{ + if (Key->CompareTo(in->Key) > 0) + return Value; + else + return in->Value; +} + + +// main function ---------------------------------------- + +void main() +{ + KVClass ^a = gcnew KVClass(5, "Five"); + KVClass ^b = gcnew KVClass(6, "Six"); + + Console::WriteLine(a->isGreater(b)); + + KVClass ^t = gcnew KVClass("Tomato", 1); + KVClass ^c = gcnew KVClass("Carrot", 2); + + Console::WriteLine(t->isGreater(c)); +} \ No newline at end of file diff --git a/Chapter04/MultiException.cpp b/Chapter04/MultiException.cpp new file mode 100644 index 0000000..2807e2b --- /dev/null +++ b/Chapter04/MultiException.cpp @@ -0,0 +1,59 @@ +using namespace System; + +/// Base Class +ref class LevelOneException : public ApplicationException +{ +public: + LevelOneException( String ^err ); +}; + +LevelOneException::LevelOneException(String ^err) : ApplicationException(err) +{ +} + +/// Inherited Class +ref class LevelTwoException : public LevelOneException +{ +public: + LevelTwoException( String ^err ); +}; + +LevelTwoException::LevelTwoException(String ^err) : LevelOneException(err) +{ +} + +/// Catching multiple exceptions +void main() +{ + for (int i = 0; i < 4; i++) + { + Console::WriteLine("Start Loop"); + try + { + if (i == 1) + throw gcnew ApplicationException("\tBase Exception Thrown"); + else if (i == 2) + throw gcnew LevelOneException("\tLevel 1 Exception Thrown"); + else if (i == 3) + throw gcnew LevelTwoException("\tLevel 2 Exception Thrown"); + + Console::WriteLine("\tNo Exception"); + } + catch (LevelTwoException ^e2) + { + Console::WriteLine(e2->Message); + Console::WriteLine("\tLevel 2 Exception Caught"); + } + catch (LevelOneException ^e1) + { + Console::WriteLine(e1->Message); + Console::WriteLine("\tLevel 1 Exception Caught"); + } + catch (ApplicationException ^e) + { + Console::WriteLine(e->Message); + Console::WriteLine("\tBase Exception Caught"); + } + Console::WriteLine("End Loop"); + } +} \ No newline at end of file diff --git a/Chapter04/PlayCards/BuildAll.bat b/Chapter04/PlayCards/BuildAll.bat new file mode 100644 index 0000000..9e14baa --- /dev/null +++ b/Chapter04/PlayCards/BuildAll.bat @@ -0,0 +1,2 @@ +cl card.cpp deck.cpp /clr:safe /LD /FeCards.dll +cl playcards.cpp /CLR:safe diff --git a/Chapter04/PlayCards/Card.cpp b/Chapter04/PlayCards/Card.cpp new file mode 100644 index 0000000..c106965 --- /dev/null +++ b/Chapter04/PlayCards/Card.cpp @@ -0,0 +1,58 @@ +using namespace System; + +#include "card.h" +using namespace Cards; + +Card::Card(int type, Suits suit) +{ + Type = type; + Suit = suit; +} + +int Card::Type::get() +{ + return type; +} + +void Card::Type::set(int value) +{ + type = value; +} + +Suits Card::Suit::get() +{ + return suit; +} + +void Card::Suit::set(Suits value) +{ + suit = value; +} + +String^ Card::ToString() +{ + String ^t; + + if (Type > 1 && Type < 11) + t = Type.ToString(); + else if (Type == 1) + t = "A"; + else if (Type == 11) + t = "J"; + else if (Type == 12) + t = "Q"; + else + t = "K"; + + switch (Suit) + { + case Suits::Heart: + return String::Concat(t, "H"); + case Suits::Diamond: + return String::Concat(t, "D"); + case Suits::Spade: + return String::Concat(t, "S"); + default: + return String::Concat(t, "C"); + } +} diff --git a/Chapter04/PlayCards/Card.h b/Chapter04/PlayCards/Card.h new file mode 100644 index 0000000..da35e6a --- /dev/null +++ b/Chapter04/PlayCards/Card.h @@ -0,0 +1,26 @@ +namespace Cards +{ + public enum class Suits { Heart, Diamond, Spade, Club }; + + public ref class Card + { + int type; + Suits suit; + + public: + Card(int type, Suits suit); + + property int Type + { + int get(); + void set(int value); + } + property Suits Suit + { + Suits get(); + void set(Suits value); + } + + virtual String^ ToString() override; + }; +} diff --git a/Chapter04/PlayCards/Deck.cpp b/Chapter04/PlayCards/Deck.cpp new file mode 100644 index 0000000..03a208a --- /dev/null +++ b/Chapter04/PlayCards/Deck.cpp @@ -0,0 +1,44 @@ +using namespace System; + +#include "card.h" +#include "deck.h" +using namespace Cards; + +Deck::Deck(void) +{ + deck = gcnew array(52); + + for (int i = 0; i < 13; i++) + { + deck[i] = gcnew Card(i+1, Suits::Heart); + deck[i+13] = gcnew Card(i+1, Suits::Club); + deck[i+26] = gcnew Card(i+1, Suits::Diamond); + deck[i+39] = gcnew Card(i+1, Suits::Spade); + } + curCard = 0; +} + +Card^ Deck::Deal() +{ + if (curCard < deck->Length) + return deck[curCard++]; + else + return nullptr; +} + +void Deck::Shuffle() +{ + Random ^r = gcnew Random(); + Card ^tmp; + int j; + + for( int i = 0; i < deck->Length; i++ ) + { + j = r->Next(deck->Length); + tmp = deck[j]; + deck[j] = deck[i]; + deck[i] = tmp; + } + + curCard = 0; +} diff --git a/Chapter04/PlayCards/Deck.h b/Chapter04/PlayCards/Deck.h new file mode 100644 index 0000000..b091265 --- /dev/null +++ b/Chapter04/PlayCards/Deck.h @@ -0,0 +1,14 @@ +namespace Cards +{ + public ref class Deck + { + array^ deck; + int curCard; + + public: + Deck(void); + + Card ^Deal(); + void Shuffle(); + }; +} diff --git a/Chapter04/PlayCards/PlayCards.cpp b/Chapter04/PlayCards/PlayCards.cpp new file mode 100644 index 0000000..a9e1f05 --- /dev/null +++ b/Chapter04/PlayCards/PlayCards.cpp @@ -0,0 +1,27 @@ +#using + +using namespace System; +using namespace Cards; + +void main() +{ + Deck deck; + + deck.Shuffle(); + + Card ^card; + int cnt = 0; + while ((card = deck.Deal()) != nullptr) + { + Console::Write(card->ToString()); + Console::Write("\t"); + cnt++; + + if (cnt > 4) + { + Console::WriteLine(""); + cnt = 0; + } + } + Console::WriteLine(""); +} \ No newline at end of file diff --git a/Chapter04/RethrowException.cpp b/Chapter04/RethrowException.cpp new file mode 100644 index 0000000..ebd79af --- /dev/null +++ b/Chapter04/RethrowException.cpp @@ -0,0 +1,25 @@ +using namespace System; + +void main() +{ + try + { + try + { + throw gcnew ApplicationException("\t***Boom***"); + Console::WriteLine("Imbedded Try End"); + } + catch (ApplicationException ^ie) + { + Console::WriteLine("Caught Exception "); + Console::WriteLine(ie->Message); + throw; + } + Console::WriteLine("Outer Try End"); + } + catch (ApplicationException ^oe) + { + Console::WriteLine("Recaught Exception "); + Console::WriteLine(oe->Message); + } +} \ No newline at end of file diff --git a/Chapter04/Templates.cpp b/Chapter04/Templates.cpp new file mode 100644 index 0000000..c8d5b36 --- /dev/null +++ b/Chapter04/Templates.cpp @@ -0,0 +1,116 @@ +using namespace System; + +// Function Template -------------------------------------- + +template +T min ( T a, T b) +{ + return (a < b) ? a : b; +} + +// Class Template ----------------------------------------- + +template +ref class Point2D +{ +public: + Point2D(); + Point2D(T x, T y); + + T X; + T Y; + + static Point2D^ operator-(const Point2D^ lhs, const Point2D^ rhs); + static Point2D^ operator*(const Point2D^ lhs, const T rhs); + + virtual String^ ToString() override; +}; + +template +Point2D::Point2D() : X((T)0), Y((T)0) {} + +template +Point2D::Point2D(T x, T y) : X(x), Y(y) {} + +template +Point2D^ Point2D::operator-(const Point2D^ lhs, const Point2D^ rhs) +{ + Point2D^ ret = gcnew Point2D(); + + ret->X = lhs->X - rhs->X; + ret->Y = lhs->Y - rhs->Y; + + return ret; +} + +template +Point2D^ Point2D::operator*(const Point2D^ lhs, const T rhs) +{ + Point2D^ ret = gcnew Point2D(); + + ret->X = lhs->X * rhs; + ret->Y = lhs->Y * rhs; + + return ret; +} + +template +String^ Point2D::ToString() +{ + return String::Format("X={0} Y={1}", X, Y); +} + +// Class Template Specialization ---------------------------- + +template <> +ref class Point2D +{ +public: + Point2D() { throw gcnew Exception("Data Type is too small"); } + Point2D(char x, char y) { throw gcnew Exception("Data Type is too small"); } +}; + +// main function -------------------------------------------- + +void main() +{ + int a = 5; + int b = 6; + double c = 5.1; + + Console::WriteLine("The min of {0} and {1} is {2}", a, b, min(a,b)); + Console::WriteLine("The min of {0} and {1} is {2}", a, c, min(a,c)); + + Console::WriteLine("----------------------------"); + + Point2D^ TopLeftI = gcnew Point2D(10, 10); + Point2D^ BottomRightI = gcnew Point2D(15, 20); + + Point2D^ SizeI = BottomRightI - TopLeftI; + Console::WriteLine(SizeI); + + SizeI = SizeI * 2; + Console::WriteLine(SizeI); + + Console::WriteLine("----------------------------"); + + Point2D^ TopLeft = gcnew Point2D(10.5, 10.9); + Point2D^ BottomRight = gcnew Point2D(15.2, 20.3); + + Point2D^ SizeD = BottomRight - TopLeft; + Console::WriteLine(SizeD); + + SizeD = SizeD * 0.5; + Console::WriteLine(SizeD); + + Console::WriteLine("----------------------------"); + + try + { + Point2D^ TopLeft = gcnew Point2D(10, 10); + } + catch (Exception^ ex) + { + Console::WriteLine(ex->Message); + } +} \ No newline at end of file diff --git a/Chapter04/ThrowDerived.cpp b/Chapter04/ThrowDerived.cpp new file mode 100644 index 0000000..0bf72f3 --- /dev/null +++ b/Chapter04/ThrowDerived.cpp @@ -0,0 +1,39 @@ +using namespace System; + +ref class MyException : public ApplicationException +{ +public: + MyException( String ^err ); +}; + +MyException::MyException(System::String ^err) : ApplicationException(err) +{ +} + +void main() +{ + for (int i = 0; i < 3; i++) + { + Console::WriteLine("Start Loop"); + try + { + if (i == 0) + { + Console::WriteLine("\tCounter equal to 0"); + } + else if (i == 1) + { + throw gcnew MyException("\t**Exception** Counter equal to 1"); + } + else + { + Console::WriteLine("\tCounter greater than 1"); + } + } + catch (MyException ^e) + { + Console::WriteLine(e->Message); + } + Console::WriteLine("End Loop"); + } +} \ No newline at end of file diff --git a/Chapter06/AllTags/AllTags.cpp b/Chapter06/AllTags/AllTags.cpp new file mode 100644 index 0000000..8c61385 --- /dev/null +++ b/Chapter06/AllTags/AllTags.cpp @@ -0,0 +1,2 @@ +#include "AllTags.h" + diff --git a/Chapter06/AllTags/AllTags.h b/Chapter06/AllTags/AllTags.h new file mode 100644 index 0000000..f29e98a --- /dev/null +++ b/Chapter06/AllTags/AllTags.h @@ -0,0 +1,155 @@ +#pragma once + +using namespace System; +using namespace System::IO; + +namespace AllTags +{ + public ref class AClass + { + public: + + /// + /// This is a summary tag for the summaryTag() method + /// + void summaryTag() {} + + /// The first int parameter + /// The second String^ parameter + void paramTag(int param1, String ^param2) {} + + /// returnsTag returns an int + int returnsTag() {return 0;} + + /// valueTag property has a value of double + property double valueTag + { + double get() {return 0.0;} + void set(double val) {} + } + + /// + /// This is a remarks tag for the remarksTag() method + /// + void remarksTag() {} + + /// + /// Example summary + /// [Visual Basic] + /// + /// Visual Basic .NET code example + /// + /// [C#] + /// + /// C# code example + /// + /// [C++] + /// + /// C++ code example + /// + /// + void exampleTag() {} + + /// + /// This method might throw this exception (NOT) + /// + void exceptionTag() {} + + /// + /// Go ahead anyone can access me. + /// + void permissionTag() {} + + /// + /// Some Program code in a summary + /// + void cTag() {} + + /// + /// Some code in an example tag + /// + /// A code statement; + /// Another code statement; + /// + /// + void codeTag() {} + + /// + /// This is the first paragraph which spans nore than one line + /// When the document window is small enough.This is the + /// next paragraph which started in a new line. + /// + void paraTag() {} + + /// + /// A bullet list + /// + /// bullet + /// bullet + /// + /// A numbered list + /// + /// entry 1 + /// entry 2 + /// entry n + /// + /// A table + /// + /// + /// row 1 -- column a + /// row 1 -- column b + /// row 1 -- column c + /// + /// + /// row 2 -- column a + /// row 2 -- column b + /// row 2 -- column c + /// + /// + /// A definition of terms + /// + /// + /// Properties + /// Initial Value + /// + /// + /// term1 name + /// term1 description + /// + /// + /// term2 name + /// term2 description + /// + /// + /// termN name + /// termN description + /// + /// + /// + void listTag() {} + + /// This is a summary with an <include> tag containing + /// a <list type="bullet"> + /// + /// + /// + void includeTag() {} + + /// This summary reference the + /// parameter of the method + /// + void paramrefTag(int param1) {} + + /// + /// The basic see tag + /// The enhanced see tag System::IO:FileInfo + /// + void seeTag() {} + + /// + /// The basic see tag [] Nothing here + /// The enhanced see tag FileInfo + /// + void seealsoTag() {} + }; +} diff --git a/Chapter06/AllTags/AllTags.vcproj b/Chapter06/AllTags/AllTags.vcproj new file mode 100644 index 0000000..2d5cfe5 --- /dev/null +++ b/Chapter06/AllTags/AllTags.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter06/AllTags/document.xml b/Chapter06/AllTags/document.xml new file mode 100644 index 0000000..83c4db8 --- /dev/null +++ b/Chapter06/AllTags/document.xml @@ -0,0 +1,20 @@ + + + + + These are repeating bullets: + + bullet + bullet + bullet + + + + + + This is a complete <remark> entry from an include + file called documentation.xml. + + + + diff --git a/Chapter06/Chapter06.sln b/Chapter06/Chapter06.sln new file mode 100644 index 0000000..49ffff3 --- /dev/null +++ b/Chapter06/Chapter06.sln @@ -0,0 +1,54 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimpleTripleSlash", "SimpleTripleSlash\SimpleTripleSlash.vcproj", "{7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ViewSimple", "ViewSimple\ViewSimple.vcproj", "{C64C6183-FD33-42CF-8A27-2774E22CFC82}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AllTags", "AllTags\AllTags.vcproj", "{E42DA001-0DAA-4ED9-AEF6-6220777D40BC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Debug|Win32.ActiveCfg = Debug|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Debug|Win32.Build.0 = Debug|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Release|Any CPU.ActiveCfg = Release|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Release|Mixed Platforms.Build.0 = Release|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Release|Win32.ActiveCfg = Release|Win32 + {7D891CBC-A936-4BD5-9697-C9B3DB8D9B98}.Release|Win32.Build.0 = Release|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Debug|Win32.ActiveCfg = Debug|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Debug|Win32.Build.0 = Debug|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Release|Any CPU.ActiveCfg = Release|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Release|Mixed Platforms.Build.0 = Release|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Release|Win32.ActiveCfg = Release|Win32 + {C64C6183-FD33-42CF-8A27-2774E22CFC82}.Release|Win32.Build.0 = Release|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Debug|Win32.ActiveCfg = Debug|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Debug|Win32.Build.0 = Debug|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Release|Any CPU.ActiveCfg = Release|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Release|Mixed Platforms.Build.0 = Release|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Release|Win32.ActiveCfg = Release|Win32 + {E42DA001-0DAA-4ED9-AEF6-6220777D40BC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter06/Chapter06.suo b/Chapter06/Chapter06.suo new file mode 100644 index 0000000000000000000000000000000000000000..b7a360cde66c5a703ce6258e023c4e92804fba95 GIT binary patch literal 21504 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 literal 0 HcmV?d00001 diff --git a/Chapter06/Documentation.chm b/Chapter06/Documentation.chm new file mode 100644 index 0000000000000000000000000000000000000000..8710152a46d05365b91fea31d7f4e2b4024dd35e GIT binary patch literal 26504 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 + /// This is a summary comment for Class1 + /// + public ref class Class1 + { + public: + /// This is a summary comment for Method1 Boo Boo + /// + /// + void Method1() {} + + /// This is a summary comment for Variable1 + int Variable1; + }; +} diff --git a/Chapter06/SimpleTripleSlash/SimpleTripleSlash.vcproj b/Chapter06/SimpleTripleSlash/SimpleTripleSlash.vcproj new file mode 100644 index 0000000..1820dc1 --- /dev/null +++ b/Chapter06/SimpleTripleSlash/SimpleTripleSlash.vcproj @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter06/ViewSimple/AssemblyInfo.cpp b/Chapter06/ViewSimple/AssemblyInfo.cpp new file mode 100644 index 0000000..4bb4f93 --- /dev/null +++ b/Chapter06/ViewSimple/AssemblyInfo.cpp @@ -0,0 +1,61 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ViewSimple")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ViewSimple")]; +[assembly:AssemblyCopyrightAttribute("Copyright @ 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter06/ViewSimple/ViewSimple.cpp b/Chapter06/ViewSimple/ViewSimple.cpp new file mode 100644 index 0000000..2c40667 --- /dev/null +++ b/Chapter06/ViewSimple/ViewSimple.cpp @@ -0,0 +1,14 @@ +// This is the main project file for VC++ application project +// generated using an Application Wizard. + +using namespace System; +using namespace SimpleTripleSlash; + +void main() +{ + Class1 ^class1 = gcnew Class1(); + + class1->Method1(); + + int x = class1->Variable1; +} diff --git a/Chapter06/ViewSimple/ViewSimple.vcproj b/Chapter06/ViewSimple/ViewSimple.vcproj new file mode 100644 index 0000000..34dedae --- /dev/null +++ b/Chapter06/ViewSimple/ViewSimple.vcproj @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter06/ViewSimple/resource.h b/Chapter06/ViewSimple/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter06/ViewSimple/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter06/ViewSimple/stdafx.cpp b/Chapter06/ViewSimple/stdafx.cpp new file mode 100644 index 0000000..38c5ac0 --- /dev/null +++ b/Chapter06/ViewSimple/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ViewSimple.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter06/ViewSimple/stdafx.h b/Chapter06/ViewSimple/stdafx.h new file mode 100644 index 0000000..5acdcf6 --- /dev/null +++ b/Chapter06/ViewSimple/stdafx.h @@ -0,0 +1,10 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +#include + +// TODO: reference additional headers your program requires here diff --git a/Chapter07/DictionaryGeneric.cpp b/Chapter07/DictionaryGeneric.cpp new file mode 100644 index 0000000..df04f7a --- /dev/null +++ b/Chapter07/DictionaryGeneric.cpp @@ -0,0 +1,113 @@ +#using + +using namespace System; +using namespace System::Collections::Generic; + +// Make the dictionary sort in reverse +ref class Reverse : public IComparer +{ +public: + virtual int Compare(int x, int y) { return y - x; } + virtual bool Equals(int x, int y) { return x == y; } + virtual int GetHashCode(int obj) { return obj.GetHashCode(); } +}; + +Dictionary^ DictionaryExample() +{ + Dictionary^ dict = gcnew Dictionary(); + + dict->Add(1, "One"); + dict->Add(6, "Six"); + dict->Add(5, "Five"); + + dict->Add(3, "3"); +// dict->Add(3, "3"); // throws an exception + dict[3] = "Three"; + + dict[7] = "Seven"; + + String^ t = dict[3]; + Console::WriteLine("dict[3] = {0}\n", t); + + for each (KeyValuePair^ pair in dict) + { + Console::WriteLine("Key = [{0}]\tValue = [{1}]", + pair->Key, pair->Value); + } + + Console::WriteLine("\nDictionary contains 6? [{0}]", + dict->ContainsKey(6)); + + dict->Remove(6); + + Console::WriteLine("\nDictionary had 6 removed? [{0}]\n", + !dict->ContainsKey(6)); + + Dictionary::KeyCollection::Enumerator ^key = + dict->Keys->GetEnumerator(); + Dictionary::ValueCollection::Enumerator ^value = + dict->Values->GetEnumerator(); + + while ( key->MoveNext() && value->MoveNext()) + { + Console::WriteLine("Key = [{0}]\tValue = [{1}]", + key->Current, value->Current); + } + + return dict; +} + +void SortedDictionaryExample(Dictionary^ inDict) +{ + SortedDictionary^ dict = + gcnew SortedDictionary(inDict, gcnew Reverse()); + + dict->Add(6, "Six"); + + String^ t = dict[3]; + Console::WriteLine("dict[3] = {0}\n", t); + + Console::WriteLine("Sorted Values:"); + for each (String ^s in dict->Values) + Console::WriteLine("\t{0}",s); + + Console::WriteLine(); + + for each (KeyValuePair^ pair in dict) + { + Console::WriteLine("Key = [{0}]\tValue = [{1}]", + pair->Key, pair->Value); + } + + Console::WriteLine("\nSortedDictionary contains 'Six'? [{0}]", + dict->ContainsValue("Six")); + + dict->Remove(6); + + Console::WriteLine("\nSortedDictionary had 'Six' removed? [{0}]\n", + !dict->ContainsValue("Six")); + + SortedDictionary::KeyCollection::Enumerator ^key = + dict->Keys->GetEnumerator(); + SortedDictionary::ValueCollection::Enumerator ^value = + dict->Values->GetEnumerator(); + + while ( key->MoveNext() && value->MoveNext()) + { + Console::WriteLine("Key = [{0}]\tValue = [{1}]", + key->Current, value->Current); + } +} + +void main() +{ + Console::WriteLine("Dictionary\n----------"); + Dictionary^ dict = DictionaryExample(); + + Console::WriteLine(); + + Console::WriteLine("\nReverse SortedDictionary\n----------------"); + SortedDictionaryExample(dict); + + Console::WriteLine(); +} diff --git a/Chapter07/HashSortList.cpp b/Chapter07/HashSortList.cpp new file mode 100644 index 0000000..8245e79 --- /dev/null +++ b/Chapter07/HashSortList.cpp @@ -0,0 +1,80 @@ +using namespace System; +using namespace System::Collections; + +void main() +{ + Hashtable ^hash = gcnew Hashtable(); + SortedList ^sort = gcnew SortedList(); + + array^ keys = gcnew array { "B", "A", "C", "D" }; + array^ skeys = gcnew array { "A", "B", "C", "D" }; + array^ values = gcnew array { "moose", "zebra", "horse", "frog" }; + + for (int i = 0; i < keys->Length; i++) + { + hash->Add(keys[i], values[i]); + sort->Add(keys[i], values[i]); + } + + Console::WriteLine("Hashtable\tSortedList"); + + Console::WriteLine("By indexed property"); + for (int i = 0; i < hash->Count; i++) + { + Console::WriteLine("{0} {1}\t\t{2} {3}", skeys[i], + hash[skeys[i]], skeys[i], sort[skeys[i]]); + } + + Console::WriteLine("\nBy index"); + for (int i = 0; i < sort->Count; i++) + { + Console::WriteLine("N/A\t\t{0} {1}", i, sort->GetByIndex(i)); + } + + Console::WriteLine("\nBy enumerator"); + IDictionaryEnumerator ^enum1 = hash->GetEnumerator(); + IDictionaryEnumerator ^enum2 = sort->GetEnumerator(); + while ( enum1->MoveNext() && enum2->MoveNext()) + { + Console::Write("{0} {1}\t\t", enum1->Key, enum1->Value); + Console::WriteLine("{0} {1}", enum2->Key, enum2->Value); + } + + Console::WriteLine("\nEnumerate Key"); + IEnumerator ^keys1 = hash->Keys->GetEnumerator(); + IEnumerator ^keys2 = sort->Keys->GetEnumerator(); + while ( keys1->MoveNext() && keys2->MoveNext()) + { + Console::Write("{0}\t\t", keys1->Current); + Console::WriteLine("{0}", keys2->Current); + } + + Console::WriteLine("\nEnumerate Value"); + IEnumerator ^vals1 = hash->Values->GetEnumerator(); + IEnumerator ^vals2 = sort->Values->GetEnumerator(); + while ( vals1->MoveNext() && vals2->MoveNext()) + { + Console::Write("{0}\t\t", vals1->Current); + Console::WriteLine("{0}", vals2->Current); + } + + Console::WriteLine("\nContains a Key 'A' and 'Z'"); + Console::WriteLine("{0}\t\t{1}", hash->Contains("A"), + sort->Contains("A")); + Console::WriteLine("{0}\t\t{1}", hash->ContainsKey("Z"), + sort->ContainsKey("Z")); + + Console::WriteLine("\nContains a Value 'frog' and 'cow'"); + Console::WriteLine("{0}\t\t{1}", hash->ContainsValue("frog"), + sort->ContainsValue("frog")); + Console::WriteLine("{0}\t\t{1}", hash->ContainsValue("cow"), + sort->ContainsValue("cow")); + + Console::WriteLine("\n\t\t'B' key index: {0}", + sort->IndexOfKey("B")); + + Console::WriteLine("\t\t'frog' value index: {0}", + sort->IndexOfValue("frog")); + + Console::WriteLine(); +} diff --git a/Chapter07/IEnum_foreach.cpp b/Chapter07/IEnum_foreach.cpp new file mode 100644 index 0000000..4008d5d --- /dev/null +++ b/Chapter07/IEnum_foreach.cpp @@ -0,0 +1,26 @@ +using namespace System; +using namespace System::Collections; + +void main() +{ + array^ IntList = gcnew array { 1, 2, 3, 4, 5 }; + + + IEnumerable ^collection = (IEnumerable^)IntList; //Not really needed + IEnumerator ^enumerator = collection->GetEnumerator(); + + Console::WriteLine("IEnumerator\n-----------"); + + while (enumerator->MoveNext()) + { + int i = (int)enumerator->Current; + Console::WriteLine(i); + } + + Console::WriteLine("\nfor each\n--------"); + + for each (int i in IntList) + Console::WriteLine(i); + + Console::WriteLine(); +} diff --git a/Chapter07/LinkedListGeneric.cpp b/Chapter07/LinkedListGeneric.cpp new file mode 100644 index 0000000..045f670 --- /dev/null +++ b/Chapter07/LinkedListGeneric.cpp @@ -0,0 +1,44 @@ +#using + +using namespace System; +using namespace System::Collections::Generic; + +int main() +{ + array^ arrList = gcnew array {"Two", "Three", "Four"}; + + LinkedList^ list = gcnew LinkedList((IEnumerable^)arrList); + + list->AddTail("Six"); + list->AddHead("Zero"); + list->AddAfter(list->Head, "One"); + list->AddBefore(list->Tail, "5"); + + Console::WriteLine("Write with error"); + + LinkedListNode^ current = list->Tail; + while (current != nullptr) + { + Console::WriteLine(current->Value); + current = current->Previous; + } + + Console::WriteLine("\nNumber of elements = {0}", list->Count); + + LinkedListNode^ node = list->Find("5"); + + list->AddBefore(node, "Five"); + list->Remove(node); + + list->RemoveHead(); + + Console::WriteLine("\nWrite with corrections"); + for each (String^ str in list) + Console::WriteLine(str); + + Console::WriteLine("\nNumber of elements = {0}", list->Count); + + Console::WriteLine(); + +// list->Add(4); // Compile time error +} \ No newline at end of file diff --git a/Chapter07/ListDict.cpp b/Chapter07/ListDict.cpp new file mode 100644 index 0000000..551a1bb --- /dev/null +++ b/Chapter07/ListDict.cpp @@ -0,0 +1,35 @@ +#using + +using namespace System; +using namespace System::Collections; +using namespace System::Collections::Specialized; + +void main() +{ + ListDictionary ^ldict = gcnew ListDictionary(); + + ldict->Add("A", "First"); + ldict->Add("B", "Second"); + ldict->Add("C", "Third"); + ldict["D"] = "Fourth"; + + try { + ldict->Add("C", "Third Replaced"); + } + catch (ArgumentException ^e) + { + Console::WriteLine("ldict->Add(\"C\", \"Third Replaced\");"); + Console::WriteLine("Throws exception: {0}", e->Message); + } + ldict["B"] = "Second Replaced"; + + Console::WriteLine("\nEnumerate"); + IEnumerator ^keys = ldict->Keys->GetEnumerator(); + IEnumerator ^vals = ldict->Values->GetEnumerator(); + while ( keys->MoveNext() && vals->MoveNext()) + { + Console::WriteLine("{0}\t\t{1}", keys->Current, vals->Current); + } + + Console::WriteLine(); +} \ No newline at end of file diff --git a/Chapter07/ListGeneric.cpp b/Chapter07/ListGeneric.cpp new file mode 100644 index 0000000..9c7aa95 --- /dev/null +++ b/Chapter07/ListGeneric.cpp @@ -0,0 +1,75 @@ +using namespace System; +using namespace System::Collections::Generic; + +// -------- StringEx class --------------------------------------- + +ref class StringEx +{ +public: + String^ Value; + + StringEx(String^ in); + virtual String^ ToString() override; + + static bool With_e_Predicate(StringEx^ val); + static void SurroundInStars(StringEx^ val); +}; + +StringEx::StringEx(String^ in) : Value(in) {} + +String^ StringEx::ToString() { return Value; } + +bool StringEx::With_e_Predicate(StringEx^ val) +{ + return val->Value->ToUpper()->IndexOf("E") > 0; +} + +void StringEx::SurroundInStars(StringEx^ val) +{ + val->Value = String::Format("** {0} **", val->Value); +} + +// ---------- Main function --------------------------------------- + +void main() +{ + List^ alist = gcnew List(); + + alist->Add(gcnew StringEx("One")); + alist->Add(gcnew StringEx("-")); + alist[1] = gcnew StringEx("Three"); + + alist->Insert(1, gcnew StringEx("Two")); + + List^ morenums = gcnew List(); + morenums->Add(gcnew StringEx("Four")); + morenums->Add(gcnew StringEx("Five")); + + alist->AddRange(morenums); + +// alist[0] = "Six"; // Compile time error not a StringEx +// alist->Add("Six"); // Compile time error not a StringEx + + Console::WriteLine("*** The List ***"); + for (int i = 0; i < alist->Count; i++) + Console::WriteLine("{0} ", alist[i]); + + // Find all words in list that contain an 'e' + List^ With_e = + alist->FindAll(gcnew Predicate(StringEx::With_e_Predicate)); + + Console::WriteLine("\n\n*** The List containing an 'e' ***"); + + for each(StringEx^ str in With_e) + Console::WriteLine("{0} ", str); + + // Surround all elements with stars + alist->ForEach(gcnew Action(StringEx::SurroundInStars)); + + Console::WriteLine("\n\n*** The List surrounded by stars ***"); + + for each(StringEx^ str in alist) + Console::WriteLine("{0} ", str); + + Console::WriteLine("\n"); +} \ No newline at end of file diff --git a/Chapter07/NameValue.cpp b/Chapter07/NameValue.cpp new file mode 100644 index 0000000..7225a9c --- /dev/null +++ b/Chapter07/NameValue.cpp @@ -0,0 +1,58 @@ +#using + +using namespace System; +using namespace System::Collections::Specialized; + +void main() +{ + NameValueCollection^ nvCol = gcnew NameValueCollection(); + + nvCol->Add(nullptr, "void"); + + nvCol->Set("Flower", "Rose"); + + nvCol->Add("Animal", "Dog"); + nvCol->Add("Animal", "Cat"); + nvCol->Add("Animal", "Cow"); + + nvCol->Add("Fruit", "Apple"); + nvCol->Add("Fruit", "Pear"); + nvCol->Add("Fruit", "Peach"); + + + array^ keys = nvCol->AllKeys; + + Console::WriteLine("Key\t\tValue"); + for (int i = 0; i < keys->Length; i++) + { + array^ vals = nvCol->GetValues(keys[i]); + + Console::WriteLine("{0}:\t\t{1}", keys[i], vals[0]); + for (int j = 1; j < vals->Length; j++) + { + Console::WriteLine("\t\t{0}", vals[j]); + } + } + + Console::WriteLine("------ Index Lookups ------"); + Console::WriteLine("Key @[1]:\t{0}", nvCol->GetKey(1)); + Console::WriteLine("Values @[3]:\t{0}", nvCol[3]); + + + nvCol->Remove(nullptr); + + nvCol["Fruit"] = "Plum"; + + nvCol->Set("Animal", "Deer"); + nvCol->Add("Animal", "Ape"); + + keys = nvCol->AllKeys; + + Console::WriteLine("--------- Updated ---------"); + for (int i = 0; i < keys->Length; i++) + { + Console::WriteLine("{0}:\t\t{1}", keys[i], nvCol->Get(keys[i])); + } + + Console::WriteLine(); +} \ No newline at end of file diff --git a/Chapter07/QueueStack.cpp b/Chapter07/QueueStack.cpp new file mode 100644 index 0000000..59d76bf --- /dev/null +++ b/Chapter07/QueueStack.cpp @@ -0,0 +1,32 @@ +using namespace System; +using namespace System::Collections; + +void main() +{ + Queue ^que = gcnew Queue(); + Stack ^stk = gcnew Stack(); + + array^ entry = gcnew array { "First", "Second", "Third", "Fourth" }; + + Console::WriteLine("Queue\t\tStack"); + + Console::WriteLine("** ON **"); + for (int i = 0; i < entry->Length; i++) + { + que->Enqueue(entry[i]); + stk->Push(entry[i]); + + Console::WriteLine("{0}\t\t{1}", entry[i], entry[i]); + } + + Console::WriteLine("\n** OFF **"); + while ((que->Count > 0) && (stk->Count > 0)) + { + Console::WriteLine("{0}\t\t{1}", que->Dequeue(), stk->Pop()); + } + + que->Clear(); + stk->Clear(); + + Console::WriteLine(""); +} \ No newline at end of file diff --git a/Chapter07/QueueStackGeneric.cpp b/Chapter07/QueueStackGeneric.cpp new file mode 100644 index 0000000..ec0b4ba --- /dev/null +++ b/Chapter07/QueueStackGeneric.cpp @@ -0,0 +1,36 @@ +#using + +using namespace System; +using namespace System::Collections::Generic; + +void main() +{ + Queue^ que = gcnew Queue(); + Stack^ stk = gcnew Stack(); + + array^ entry = gcnew array { + "First", "Second", "Third", "Fourth" + }; + + Console::WriteLine("Queue\t\tStack"); + + Console::WriteLine("** ON **"); + for (int i = 0; i < entry->Length; i++) + { + que->Enqueue(entry[i]); + stk->Push(entry[i]); + + Console::WriteLine("{0}\t\t{1}", entry[i], entry[i]); + } + + Console::WriteLine("\n** OFF **"); + while ((que->Count > 0) && (stk->Count > 0)) + { + Console::WriteLine("{0}\t\t{1}", que->Dequeue(), stk->Pop()); + } + + que->Clear(); + stk->Clear(); + + Console::WriteLine("\n"); +} diff --git a/Chapter07/StringColl.cpp b/Chapter07/StringColl.cpp new file mode 100644 index 0000000..c63978b --- /dev/null +++ b/Chapter07/StringColl.cpp @@ -0,0 +1,32 @@ +#using + +using namespace System; +using namespace System::Collections; +using namespace System::Collections::Specialized; + +void main() +{ + StringCollection ^strcol = gcnew StringCollection(); + + strcol->Add("The first String"); + + array^ tmpstr = gcnew array {"Third", "Fourth" }; + strcol->AddRange(tmpstr); + + strcol->Insert(1, "Second"); + + strcol[0] = "First"; + + StringEnumerator ^strenum = strcol->GetEnumerator(); + while ( strenum->MoveNext()) + { + Console::WriteLine(strenum->Current); + } + + Console::WriteLine("\n'for each' works as well"); + + for each (String^ s in strcol) + Console::WriteLine(s); + + Console::WriteLine(); +} \ No newline at end of file diff --git a/Chapter07/StringDict.cpp b/Chapter07/StringDict.cpp new file mode 100644 index 0000000..cc08002 --- /dev/null +++ b/Chapter07/StringDict.cpp @@ -0,0 +1,27 @@ +#using + +using namespace System; +using namespace System::Collections; +using namespace System::Collections::Specialized; + +void main() +{ + StringDictionary ^strdict = gcnew StringDictionary(); + + strdict->Add("Dog", "Four leg, hydrant loving, barking, mammal"); + strdict->Add("Frog", "Green, jumping, croaking, amphibian"); + + strdict["Crocodile"] = "Ugly, boot origin, snapping, reptile"; + + ArrayList ^alist = gcnew ArrayList(); + alist->AddRange(strdict->Keys); + alist->Sort(); + + for (int i = 0; i < alist->Count; i++) + { + Console::WriteLine("{0,10}:\t{1}", alist[i], + strdict[(String^)alist[i]]); + } + + Console::WriteLine(); +} \ No newline at end of file diff --git a/Chapter07/arraylist.cpp b/Chapter07/arraylist.cpp new file mode 100644 index 0000000..c3a45fc --- /dev/null +++ b/Chapter07/arraylist.cpp @@ -0,0 +1,41 @@ +using namespace System; +using namespace System::Collections; + +void main() +{ + ArrayList ^alist = gcnew ArrayList(4); // will double to 8 + alist->Add("One"); + alist->Add("-"); + alist[1] = "Three"; + + alist->Insert(1, "Two"); + + array^ morenums = gcnew array {"Four", "Five"}; + + alist->AddRange(morenums); + + alist->Reverse(); + + Console::WriteLine("*** The ArrayList ***"); + for (int i = 0; i < alist->Count; i++) + { + Console::Write("{0} ", alist[i]); + } + + Console::WriteLine("\n\nCapacity is: {0}", alist->Capacity.ToString()); + + alist->Capacity = 10; + Console::WriteLine("New capacity is: {0}", alist->Capacity.ToString()); + + Console::WriteLine("Count is: {0}", alist->Count.ToString()); + + alist->Sort(); + + int indx = alist->BinarySearch("Four"); + Console::WriteLine("Four found at index: {0}", indx.ToString()); + + bool fnd = alist->Contains("One"); + Console::WriteLine("ArrayList contains a 'One': {0}", fnd.ToString()); + + Console::WriteLine(); +} \ No newline at end of file diff --git a/Chapter07/bitarray.cpp b/Chapter07/bitarray.cpp new file mode 100644 index 0000000..80c5c39 --- /dev/null +++ b/Chapter07/bitarray.cpp @@ -0,0 +1,52 @@ +using namespace System; +using namespace System::Collections; + +void Print( BitArray ^barray, String ^desc) +{ + Console::WriteLine(desc); + + int i = 0; + for each( bool^ val in barray ) + { + Console::Write("{0} ", val); + + if (++i > 7) + { + Console::WriteLine(); + i = 0; + } + } + Console::WriteLine(); +} + +void main() +{ + BitArray ^barray1 = gcnew BitArray( 8, true ); + Print(barray1, "BitArray( 8, true );"); + + barray1[1] = false; + barray1[4] = false; + barray1->Not(); + Print(barray1, "Modified bit 1&4 then Not"); + + BitArray ^barray2 = gcnew BitArray( 8, true ); + barray2->And(barray1); + Print(barray2, "And with BitArray( 8, true )"); + + barray2->SetAll(true); + barray2->Or(barray1); + Print(barray2, "Or with BitArray( 8, true )"); + + barray2->SetAll(true); + barray2->Xor(barray1); + Print(barray2, "Xor with BitArray( 8, true )"); + + array^ chars = gcnew array { 0x55, 0xAA }; + BitArray ^barray3 = gcnew BitArray( chars ); + Print(barray3, "BitArray(0x55, 0xAA);"); + + Console::WriteLine("Item[0]={0}", barray3[0]); + Console::WriteLine("Item[8]={0}", barray3[8]); + + Console::WriteLine(); +} \ No newline at end of file diff --git a/Chapter07/buildall.bat b/Chapter07/buildall.bat new file mode 100644 index 0000000..7ecbb3c --- /dev/null +++ b/Chapter07/buildall.bat @@ -0,0 +1,13 @@ +cl arraylist.cpp /clr:safe +cl bitarray.cpp /clr:safe +cl DictionaryGeneric.cpp /clr:safe +cl HashSortList.cpp /clr:safe +cl IEnum_foreach.cpp /clr:safe +cl LinkedListGeneric.cpp /clr:safe +cl ListDict.cpp /clr:safe +cl ListGeneric.cpp /clr:safe +cl NameValue.cpp /clr:safe +cl QueueStack.cpp /clr:safe +cl QueueStackGeneric.cpp /clr:safe +cl StringColl.cpp /clr:safe +cl StringDict.cpp /clr:safe diff --git a/Chapter08/BinFormSerial.cpp b/Chapter08/BinFormSerial.cpp new file mode 100644 index 0000000..baa1b8c --- /dev/null +++ b/Chapter08/BinFormSerial.cpp @@ -0,0 +1,96 @@ +using namespace System; +using namespace System::IO; +using namespace System::Runtime::Serialization::Formatters::Binary; + +// --------- Player Attribute class ------------------------------------ + +[Serializable] +ref class PlayerAttr +{ +public: + property int Strength; + property int Dexterity; + property int Constitution; + property int Intelligence; + property int Wisdom; + property int Charisma; + + PlayerAttr(int Str, int Dex, int Con, int Int, int Wis, int Cha); + void Print(); +}; + +PlayerAttr::PlayerAttr(int Str, int Dex, int Con, int Int, int Wis, int Cha) +{ + this->Strength = Str; + this->Dexterity = Dex; + this->Constitution = Con; + this->Intelligence = Int; + this->Wisdom = Wis; + this->Charisma = Cha; +} + +void PlayerAttr::Print() +{ + Console::WriteLine("Str: {0}, Dex: {1}, Con {2}", + Strength, Dexterity, Constitution); + Console::WriteLine("Int: {0}, Wis: {1}, Cha {2}", + Intelligence, Wisdom, Charisma); +} + +// -------- Player class --------------------------------------- + +[Serializable] +ref class Player +{ +public: + property String ^Name; + property String ^Race; + property String ^Class; + property PlayerAttr ^pattr; + + Player (String ^Name, String ^Race, String ^Class, + int Str, int Dex, int Con, int Int, int Wis, int Cha); + void Print(); +}; + +Player::Player (String ^Name, String ^Race, String ^Class, + int Str, int Dex, int Con, int Int, int Wis, int Cha) +{ + this->Name = Name; + this->Race = Race; + this->Class = Class; + this->pattr = gcnew PlayerAttr(Str, Dex, Con, Int, Wis, Cha); +} + +void Player::Print() +{ + Console::WriteLine("Name: {0}", Name); + Console::WriteLine("Race: {0}", Race); + Console::WriteLine("Class: {0}", Class); + pattr->Print(); +} + +// -------- Main Function ---------------------------------------------- + + +Int32 main(void) +{ + Player ^Joe = gcnew Player("Joe", "Human", "Thief", 10, 18, 9, 13,10, 11); + + Console::WriteLine("Original Joe"); + Joe->Print(); + + FileStream ^plStream = File::Create("Player.dat"); + + BinaryFormatter ^bf = gcnew BinaryFormatter(); + bf->Serialize(plStream, Joe); + plStream->Close(); + + plStream = File::OpenRead("Player.dat"); + + Player ^JoeClone = (Player^)bf->Deserialize(plStream); + plStream->Close(); + + Console::WriteLine("\nCloned Joe"); + JoeClone->Print(); +} \ No newline at end of file diff --git a/Chapter08/BinaryRW.cpp b/Chapter08/BinaryRW.cpp new file mode 100644 index 0000000..e9d7bb0 --- /dev/null +++ b/Chapter08/BinaryRW.cpp @@ -0,0 +1,89 @@ +using namespace System; +using namespace System::IO; +using namespace System::Runtime::Serialization::Formatters::Binary; + +// ------ Player class --------------------------------------------- + +ref class Player +{ + String ^Name; + Int32 Strength; + Boolean IsMale; + DateTime CreateDate; + +public: + Player(); + Player (String ^Name, int Str, bool IsMale); + + void Print(); + void Save(String ^fname); + void Load(String ^fname); +}; + +Player::Player() +{ +} + +Player::Player (String ^Name, int Str, bool IsMale) +{ + this->Name = Name; + this->Strength = Str; + this->IsMale = IsMale; + this->CreateDate = DateTime::Now; +} + +void Player::Print() +{ + Console::WriteLine("Name: {0} ({1})", Name, (IsMale ? "M" : "F")); + Console::WriteLine("Str: {0}", Strength); + Console::WriteLine("Date: {0}", CreateDate.ToString()); +} + +void Player::Save(String ^fname) +{ + FileStream ^fs = File::OpenWrite(fname); + BinaryWriter ^bw = gcnew BinaryWriter(fs); + + bw->Write(Name); + bw->Write(Strength); + bw->Write(IsMale); + + // Due to multicultures this is a safe way of storing DateTimes + bw->Write(CreateDate.Ticks); + + bw->Close(); + fs->Close(); +} + +void Player::Load(String ^fname) +{ + FileStream ^fs = File::OpenRead(fname); + BinaryReader ^br = gcnew BinaryReader(fs); + + Name = br->ReadString(); + Strength = br->ReadInt32(); + IsMale = br->ReadBoolean(); + + // Due to multicultures this is a safe way of retrieving DateTimes + CreateDate = DateTime( br->ReadInt64() ); + + br->Close(); + fs->Close(); +} + +// ------- Main Function --------------------------------------------- + +void main() +{ + Player ^Joe = gcnew Player("Joe", 10, true); + Joe->Save("Player.dat"); + + Console::WriteLine("Original Joe"); + Joe->Print(); + + Player ^JoeClone = gcnew Player(); + JoeClone->Load("Player.dat"); + + Console::WriteLine("\nCloned Joe"); + JoeClone->Print(); +} \ No newline at end of file diff --git a/Chapter08/DirInfo.cpp b/Chapter08/DirInfo.cpp new file mode 100644 index 0000000..9574125 --- /dev/null +++ b/Chapter08/DirInfo.cpp @@ -0,0 +1,75 @@ +using namespace System; +using namespace System::IO; +using namespace System::Text; + +int main(array ^args) +{ + if (args->Length == 0) + { + Console::WriteLine("Usage: DirInfo "); + return -1; + } + + StringBuilder ^tmppath = gcnew StringBuilder(); + + for each (String^ s in args) + { + tmppath->Append(s); + tmppath->Append(" "); + } + + String ^path = tmppath->ToString()->Trim(); + + DirectoryInfo ^dir = gcnew DirectoryInfo(path); + + if (!dir->Exists) + { + Console::WriteLine("Directory Not Found"); + return -1; + } + + Console::WriteLine("Name: {0}", dir->FullName); + + Console::WriteLine("Created: {0} {1}", + dir->CreationTime.ToShortDateString(), + dir->CreationTime.ToLongTimeString()); + + Console::WriteLine("Accessed: {0} {1}", + dir->LastAccessTime.ToShortDateString(), + dir->LastAccessTime.ToLongTimeString()); + + Console::WriteLine("Updated: {0} {1}", + dir->LastWriteTime.ToShortDateString(), + dir->LastWriteTime.ToLongTimeString()); + + Console::WriteLine("Attributes: {0}", + dir->Attributes); + + Console::WriteLine("Sub-Directories:"); + + array^ subDirs = dir->GetDirectories(); + if (subDirs->Length == 0) + Console::WriteLine("\tNone."); + else + { + for each (DirectoryInfo^ dinfo in subDirs) + { + Console::WriteLine("\t{0}", dinfo->Name); + } + } + + Console::WriteLine("Files:"); + + array^ files = dir->GetFiles(); + if (files->Length == 0) + Console::WriteLine("\tNone."); + else + { + for each (FileInfo^ finfo in files) + { + Console::WriteLine("\t{0}", finfo->Name); + } + } + + return 0; +} diff --git a/Chapter08/FileInfo.cpp b/Chapter08/FileInfo.cpp new file mode 100644 index 0000000..6d635b1 --- /dev/null +++ b/Chapter08/FileInfo.cpp @@ -0,0 +1,50 @@ +using namespace System; +using namespace System::IO; +using namespace System::Text; + +int main(array ^args) +{ + if (args->Length == 0) + { + Console::WriteLine("Usage: FileInfo "); + return -1; + } + + StringBuilder ^tmpfile = gcnew StringBuilder(); + + for each (String^ s in args) + { + tmpfile->Append(s); + tmpfile->Append(" "); + } + + String ^strfile = tmpfile->ToString()->Trim(); + + FileInfo ^fileinfo = gcnew FileInfo(strfile); + + if (!fileinfo->Exists) + { + Console::WriteLine("File Not Found"); + return -1; + } + + Console::WriteLine("Name: {0}", fileinfo->FullName); + + Console::WriteLine("Created: {0} {1}", + fileinfo->CreationTime.ToShortDateString(), + fileinfo->CreationTime.ToLongTimeString()); + + Console::WriteLine("Accessed: {0} {1}", + fileinfo->LastAccessTime.ToShortDateString(), + fileinfo->LastAccessTime.ToLongTimeString()); + + Console::WriteLine("Updated: {0} {1}", + fileinfo->LastWriteTime.ToShortDateString(), + fileinfo->LastWriteTime.ToLongTimeString()); + + Console::WriteLine("Length: {0}", fileinfo->Length); + + Console::WriteLine("Attributes: {0}", fileinfo->Attributes); + + return 0; +} \ No newline at end of file diff --git a/Chapter08/FileStream.cpp b/Chapter08/FileStream.cpp new file mode 100644 index 0000000..9f52894 --- /dev/null +++ b/Chapter08/FileStream.cpp @@ -0,0 +1,50 @@ +using namespace System; +using namespace System::IO; + +void main() +{ + FileStream ^fso = gcnew FileStream("file.dat", FileMode::Create, + FileAccess::Write, FileShare::None); + + array^ data = gcnew array { 'T', 'h', 'i', + 's', ' ', 'i', 's', ' ', 'a', ' ', 't', 'e', + 's', 't', '!', '\r', '\n', 'T', 'h', 'i', 's', + ' ', 'i', 's', ' ', 'o', 'n', 'l', 'y', ' ', + 'a', ' ', 't', 'e', 's', 't', '.','\r', '\n' }; + + for (int i = 0; i < data->Length-5; i += 5) + { + fso->Write(data, i, 5); + } + + for (int i = data->Length-4; i < data->Length; i++) + { + fso->WriteByte(data[i]); + } + + fso->Close(); + + FileInfo ^fi = gcnew FileInfo("file.dat"); + FileStream ^fsi = fi->OpenRead(); + + int b; + while ((b = fsi->ReadByte()) != -1) + { + Console::Write((Char)b); + } + + fsi->Position = 0; + + array^ ca = gcnew array(17); + fsi->Read(ca, 0, 17); + for (int i = 0; i < ca->Length; i++) + { + Console::Write((Char)ca[i]); + } + + Console::WriteLine(); + + fsi->Close(); + + fi->Delete(); // If you want to get rid of it +} \ No newline at end of file diff --git a/Chapter08/MemoryStream.cpp b/Chapter08/MemoryStream.cpp new file mode 100644 index 0000000..6e77304 --- /dev/null +++ b/Chapter08/MemoryStream.cpp @@ -0,0 +1,38 @@ +using namespace System; +using namespace System::IO; + +void main() +{ + array^ data = gcnew array { 'T', 'h', 'i', + 's', ' ', 'i', 's', ' ', 'a', ' ', 't', 'e', 's', 't', + '!', '\r', '\n', 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', + 'o', 'n', 'l', 'y', ' ', 'a', ' ', 't', 'e', 's', 't', + '.','\r', '\n' }; + + MemoryStream ^ms = gcnew MemoryStream(); + ms->Capacity = 40; + + for (int i = 0; i < data->Length-5; i += 5) + { + ms->Write(data, i, 5); + } + + for (int i = data->Length-4; i < data->Length; i++) + { + ms->WriteByte(data[i]); + } + + array^ ca = ms->GetBuffer(); + for each (unsigned char c in ca) + { + Console::Write((Char)c); + } + Console::WriteLine(); + + FileStream ^fs = File::OpenWrite("file.dat"); + + ms->WriteTo(fs); + + fs->Close(); + ms->Close(); +} \ No newline at end of file diff --git a/Chapter08/SoapFormSerial.cpp b/Chapter08/SoapFormSerial.cpp new file mode 100644 index 0000000..f939321 --- /dev/null +++ b/Chapter08/SoapFormSerial.cpp @@ -0,0 +1,98 @@ +#using + +using namespace System; +using namespace System::IO; +using namespace System::Runtime::Serialization::Formatters::Soap; + +// --------- Player Attribute class ------------------------------------ + +[Serializable] +ref class PlayerAttr +{ +public: + property int Strength; + property int Dexterity; + property int Constitution; + property int Intelligence; + property int Wisdom; + property int Charisma; + + PlayerAttr(int Str, int Dex, int Con, int Int, int Wis, int Cha); + void Print(); +}; + +PlayerAttr::PlayerAttr(int Str, int Dex, int Con, int Int, int Wis, int Cha) +{ + this->Strength = Str; + this->Dexterity = Dex; + this->Constitution = Con; + this->Intelligence = Int; + this->Wisdom = Wis; + this->Charisma = Cha; +} + +void PlayerAttr::Print() +{ + Console::WriteLine("Str: {0}, Dex: {1}, Con {2}", + Strength, Dexterity, Constitution); + Console::WriteLine("Int: {0}, Wis: {1}, Cha {2}", + Intelligence, Wisdom, Charisma); +} + +// -------- Player class --------------------------------------- + +[Serializable] +ref class Player +{ +public: + property String ^Name; + property String ^Race; + property String ^Class; + property PlayerAttr ^pattr; + + Player (String ^Name, String ^Race, String ^Class, + int Str, int Dex, int Con, int Int, int Wis, int Cha); + void Print(); +}; + +Player::Player (String ^Name, String ^Race, String ^Class, + int Str, int Dex, int Con, int Int, int Wis, int Cha) +{ + this->Name = Name; + this->Race = Race; + this->Class = Class; + this->pattr = gcnew PlayerAttr(Str, Dex, Con, Int, Wis, Cha); +} + +void Player::Print() +{ + Console::WriteLine("Name: {0}", Name); + Console::WriteLine("Race: {0}", Race); + Console::WriteLine("Class: {0}", Class); + pattr->Print(); +} + +// -------- Main Function ---------------------------------------------- + + +int main(void) +{ + Player ^Joe = gcnew Player("Joe", "Human", "Thief", 10, 18, 9, 13,10, 11); + + Console::WriteLine("Original Joe"); + Joe->Print(); + + FileStream ^plStream = File::Create("Player.xml"); + + SoapFormatter ^sf = gcnew SoapFormatter(); + sf->Serialize(plStream, Joe); + plStream->Close(); + + plStream = File::OpenRead("Player.xml"); + + Player ^JoeClone = (Player^)sf->Deserialize(plStream); + plStream->Close(); + + Console::WriteLine("\nCloned Joe"); + JoeClone->Print(); +} \ No newline at end of file diff --git a/Chapter08/StreamRW.cpp b/Chapter08/StreamRW.cpp new file mode 100644 index 0000000..9b9f02a --- /dev/null +++ b/Chapter08/StreamRW.cpp @@ -0,0 +1,30 @@ +using namespace System; +using namespace System::IO; + +void main() +{ + array^ data = gcnew array { + "This is ", "a test!", "This is only a test." }; + + StreamWriter ^sw = gcnew StreamWriter(gcnew FileStream("file.dat", + FileMode::Create, FileAccess::Write, FileShare::None)); + + for (int i = 0; i < data->Length-1; i++) + { + sw->Write(data[i]); + } + sw->WriteLine(); + + sw->WriteLine(data[2]); + + sw->Close(); + + StreamReader ^sr = File::OpenText("file.dat"); + + String^ in = sr->ReadLine(); + Console::WriteLine(in); + + Console::WriteLine(sr->ReadToEnd()); + + sw->Close(); +} \ No newline at end of file diff --git a/Chapter08/buildall.bat b/Chapter08/buildall.bat new file mode 100644 index 0000000..5ced349 --- /dev/null +++ b/Chapter08/buildall.bat @@ -0,0 +1,8 @@ +cl BinaryRW.cpp /clr:safe +cl BinFormSerial.cpp /clr:safe +cl DirInfo.cpp /clr +cl FileInfo.cpp /clr +cl filestream.cpp /clr:safe +cl memorystream.cpp /clr:safe +cl SoapFormSerial.cpp /clr:safe +cl StreamRW.cpp /clr:safe diff --git a/Chapter09/ArrayOfRadios/ArrayOfRadios.cpp b/Chapter09/ArrayOfRadios/ArrayOfRadios.cpp new file mode 100644 index 0000000..f02d3dc --- /dev/null +++ b/Chapter09/ArrayOfRadios/ArrayOfRadios.cpp @@ -0,0 +1,18 @@ +// ArrayOfRadios.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace ArrayOfRadios; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/ArrayOfRadios/ArrayOfRadios.vcproj b/Chapter09/ArrayOfRadios/ArrayOfRadios.vcproj new file mode 100644 index 0000000..e3a8644 --- /dev/null +++ b/Chapter09/ArrayOfRadios/ArrayOfRadios.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/ArrayOfRadios/AssemblyInfo.cpp b/Chapter09/ArrayOfRadios/AssemblyInfo.cpp new file mode 100644 index 0000000..cf0c58d --- /dev/null +++ b/Chapter09/ArrayOfRadios/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ArrayOfRadios")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ArrayOfRadios")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/ArrayOfRadios/Form1.h b/Chapter09/ArrayOfRadios/Form1.h new file mode 100644 index 0000000..526fb11 --- /dev/null +++ b/Chapter09/ArrayOfRadios/Form1.h @@ -0,0 +1,86 @@ +#pragma once + +namespace ArrayOfRadios +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + array^ rbText = gcnew array { + L"Can", L"You", L"Click", L"More", L"Than", L"One" + }; + radios = gcnew array(6); + label = gcnew Label(); + + for (int i = 0; i < radios->Length; i++) + { + int j = 50*i; + radios[i] = gcnew RadioButton(); + radios[i]->BackColor = Color::FromArgb(255,j+5,j+5,j+5); + radios[i]->ForeColor = Color::FromArgb(255,250-j,250-j,250-j); + radios[i]->Location = Drawing::Point(90, 10+(40*i)); + radios[i]->TabIndex = i; + radios[i]->TabStop = true; + radios[i]->Text = rbText[i]; + radios[i]->CheckedChanged += + gcnew EventHandler(this, &Form1::radioCheckedChanged); + } + Controls->AddRange(radios); + + label->Location = Drawing::Point(90, 10+(40*radios->Length)); + Controls->Add(label); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + array^ radios; + Label ^label; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"An Array Of Radios"; + this->ResumeLayout(false); + + } +#pragma endregion + + private: + void radioCheckedChanged(Object ^sender, EventArgs ^e) + { + RadioButton ^rb = (RadioButton^)sender; + + if (rb->Checked == true) + label->Text = rb->Text; + } + }; +} + diff --git a/Chapter09/ArrayOfRadios/Form1.resx b/Chapter09/ArrayOfRadios/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/ArrayOfRadios/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/ArrayOfRadios/stdafx.cpp b/Chapter09/ArrayOfRadios/stdafx.cpp new file mode 100644 index 0000000..b8dd4c0 --- /dev/null +++ b/Chapter09/ArrayOfRadios/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ArrayOfRadios.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/ArrayOfRadios/stdafx.h b/Chapter09/ArrayOfRadios/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/ArrayOfRadios/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/Chapter09.sln b/Chapter09/Chapter09.sln new file mode 100644 index 0000000..187ea1e --- /dev/null +++ b/Chapter09/Chapter09.sln @@ -0,0 +1,104 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ArrayOfRadios", "ArrayOfRadios\ArrayOfRadios.vcproj", "{5DA11E94-FBA3-4247-BBB2-767AA84A96C0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CheckMe", "CheckMe\CheckMe.vcproj", "{071A6F09-3A5E-49CB-8249-B7BB7B270DB3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomHello", "CustomHello\CustomHello.vcproj", "{344F8A49-4411-4A95-80A0-B1C625EBC6B0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GroupingRadios", "GroupingRadios\GroupingRadios.vcproj", "{579022FD-9B93-4339-AB14-9406D0A16389}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Hello", "Hello\Hello.vcproj", "{1E55F865-7E76-4C7E-856A-679810CC5E45}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ListTransfers", "ListTransfers\ListTransfers.vcproj", "{B7E70C29-D7BE-47DF-A5ED-EA7EE70E7259}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MightyLabel", "MightyLabel\MightyLabel.vcproj", "{DEB8DB95-E0D5-47D5-BD85-5CB81BCB0087}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinuteTimer", "MinuteTimer\MinuteTimer.vcproj", "{9AEDD737-A8E6-4461-A13B-DC727345CD60}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MouseJump", "MouseJump\MouseJump.vcproj", "{9E295046-5F85-4DC3-9B4B-FBFC6958F792}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Panels", "Panels\Panels.vcproj", "{A61DE735-8D7E-4FB2-BC6C-673E415E298E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RichText", "RichText\RichText.vcproj", "{7E94547E-291F-45C0-BA26-DC8B144B4C8B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SplitCLB", "SplitCLB\SplitCLB.vcproj", "{F69D9B1C-70F1-48EC-A1C5-E7B3956CDABC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SyncCombos", "SyncCombos\SyncCombos.vcproj", "{4297C3DE-E28C-4ADD-A690-ACCC79F225CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TextEntry", "TextEntry\TextEntry.vcproj", "{8FA40ED0-3404-43E9-AAFF-0F68CA4A3E2D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TooManyButtons", "TooManyButtons\TooManyButtons.vcproj", "{B4795061-9118-4355-BAD0-215DFAFF3FCD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5DA11E94-FBA3-4247-BBB2-767AA84A96C0}.Debug|Win32.ActiveCfg = Debug|Win32 + {5DA11E94-FBA3-4247-BBB2-767AA84A96C0}.Debug|Win32.Build.0 = Debug|Win32 + {5DA11E94-FBA3-4247-BBB2-767AA84A96C0}.Release|Win32.ActiveCfg = Release|Win32 + {5DA11E94-FBA3-4247-BBB2-767AA84A96C0}.Release|Win32.Build.0 = Release|Win32 + {071A6F09-3A5E-49CB-8249-B7BB7B270DB3}.Debug|Win32.ActiveCfg = Debug|Win32 + {071A6F09-3A5E-49CB-8249-B7BB7B270DB3}.Debug|Win32.Build.0 = Debug|Win32 + {071A6F09-3A5E-49CB-8249-B7BB7B270DB3}.Release|Win32.ActiveCfg = Release|Win32 + {071A6F09-3A5E-49CB-8249-B7BB7B270DB3}.Release|Win32.Build.0 = Release|Win32 + {344F8A49-4411-4A95-80A0-B1C625EBC6B0}.Debug|Win32.ActiveCfg = Debug|Win32 + {344F8A49-4411-4A95-80A0-B1C625EBC6B0}.Debug|Win32.Build.0 = Debug|Win32 + {344F8A49-4411-4A95-80A0-B1C625EBC6B0}.Release|Win32.ActiveCfg = Release|Win32 + {344F8A49-4411-4A95-80A0-B1C625EBC6B0}.Release|Win32.Build.0 = Release|Win32 + {579022FD-9B93-4339-AB14-9406D0A16389}.Debug|Win32.ActiveCfg = Debug|Win32 + {579022FD-9B93-4339-AB14-9406D0A16389}.Debug|Win32.Build.0 = Debug|Win32 + {579022FD-9B93-4339-AB14-9406D0A16389}.Release|Win32.ActiveCfg = Release|Win32 + {579022FD-9B93-4339-AB14-9406D0A16389}.Release|Win32.Build.0 = Release|Win32 + {1E55F865-7E76-4C7E-856A-679810CC5E45}.Debug|Win32.ActiveCfg = Debug|Win32 + {1E55F865-7E76-4C7E-856A-679810CC5E45}.Debug|Win32.Build.0 = Debug|Win32 + {1E55F865-7E76-4C7E-856A-679810CC5E45}.Release|Win32.ActiveCfg = Release|Win32 + {1E55F865-7E76-4C7E-856A-679810CC5E45}.Release|Win32.Build.0 = Release|Win32 + {B7E70C29-D7BE-47DF-A5ED-EA7EE70E7259}.Debug|Win32.ActiveCfg = Debug|Win32 + {B7E70C29-D7BE-47DF-A5ED-EA7EE70E7259}.Debug|Win32.Build.0 = Debug|Win32 + {B7E70C29-D7BE-47DF-A5ED-EA7EE70E7259}.Release|Win32.ActiveCfg = Release|Win32 + {B7E70C29-D7BE-47DF-A5ED-EA7EE70E7259}.Release|Win32.Build.0 = Release|Win32 + {DEB8DB95-E0D5-47D5-BD85-5CB81BCB0087}.Debug|Win32.ActiveCfg = Debug|Win32 + {DEB8DB95-E0D5-47D5-BD85-5CB81BCB0087}.Debug|Win32.Build.0 = Debug|Win32 + {DEB8DB95-E0D5-47D5-BD85-5CB81BCB0087}.Release|Win32.ActiveCfg = Release|Win32 + {DEB8DB95-E0D5-47D5-BD85-5CB81BCB0087}.Release|Win32.Build.0 = Release|Win32 + {9AEDD737-A8E6-4461-A13B-DC727345CD60}.Debug|Win32.ActiveCfg = Debug|Win32 + {9AEDD737-A8E6-4461-A13B-DC727345CD60}.Debug|Win32.Build.0 = Debug|Win32 + {9AEDD737-A8E6-4461-A13B-DC727345CD60}.Release|Win32.ActiveCfg = Release|Win32 + {9AEDD737-A8E6-4461-A13B-DC727345CD60}.Release|Win32.Build.0 = Release|Win32 + {9E295046-5F85-4DC3-9B4B-FBFC6958F792}.Debug|Win32.ActiveCfg = Debug|Win32 + {9E295046-5F85-4DC3-9B4B-FBFC6958F792}.Debug|Win32.Build.0 = Debug|Win32 + {9E295046-5F85-4DC3-9B4B-FBFC6958F792}.Release|Win32.ActiveCfg = Release|Win32 + {9E295046-5F85-4DC3-9B4B-FBFC6958F792}.Release|Win32.Build.0 = Release|Win32 + {A61DE735-8D7E-4FB2-BC6C-673E415E298E}.Debug|Win32.ActiveCfg = Debug|Win32 + {A61DE735-8D7E-4FB2-BC6C-673E415E298E}.Debug|Win32.Build.0 = Debug|Win32 + {A61DE735-8D7E-4FB2-BC6C-673E415E298E}.Release|Win32.ActiveCfg = Release|Win32 + {A61DE735-8D7E-4FB2-BC6C-673E415E298E}.Release|Win32.Build.0 = Release|Win32 + {7E94547E-291F-45C0-BA26-DC8B144B4C8B}.Debug|Win32.ActiveCfg = Debug|Win32 + {7E94547E-291F-45C0-BA26-DC8B144B4C8B}.Debug|Win32.Build.0 = Debug|Win32 + {7E94547E-291F-45C0-BA26-DC8B144B4C8B}.Release|Win32.ActiveCfg = Release|Win32 + {7E94547E-291F-45C0-BA26-DC8B144B4C8B}.Release|Win32.Build.0 = Release|Win32 + {F69D9B1C-70F1-48EC-A1C5-E7B3956CDABC}.Debug|Win32.ActiveCfg = Debug|Win32 + {F69D9B1C-70F1-48EC-A1C5-E7B3956CDABC}.Debug|Win32.Build.0 = Debug|Win32 + {F69D9B1C-70F1-48EC-A1C5-E7B3956CDABC}.Release|Win32.ActiveCfg = Release|Win32 + {F69D9B1C-70F1-48EC-A1C5-E7B3956CDABC}.Release|Win32.Build.0 = Release|Win32 + {4297C3DE-E28C-4ADD-A690-ACCC79F225CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {4297C3DE-E28C-4ADD-A690-ACCC79F225CC}.Debug|Win32.Build.0 = Debug|Win32 + {4297C3DE-E28C-4ADD-A690-ACCC79F225CC}.Release|Win32.ActiveCfg = Release|Win32 + {4297C3DE-E28C-4ADD-A690-ACCC79F225CC}.Release|Win32.Build.0 = Release|Win32 + {8FA40ED0-3404-43E9-AAFF-0F68CA4A3E2D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FA40ED0-3404-43E9-AAFF-0F68CA4A3E2D}.Debug|Win32.Build.0 = Debug|Win32 + {8FA40ED0-3404-43E9-AAFF-0F68CA4A3E2D}.Release|Win32.ActiveCfg = Release|Win32 + {8FA40ED0-3404-43E9-AAFF-0F68CA4A3E2D}.Release|Win32.Build.0 = Release|Win32 + {B4795061-9118-4355-BAD0-215DFAFF3FCD}.Debug|Win32.ActiveCfg = Debug|Win32 + {B4795061-9118-4355-BAD0-215DFAFF3FCD}.Debug|Win32.Build.0 = Debug|Win32 + {B4795061-9118-4355-BAD0-215DFAFF3FCD}.Release|Win32.ActiveCfg = Release|Win32 + {B4795061-9118-4355-BAD0-215DFAFF3FCD}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter09/Chapter09.suo b/Chapter09/Chapter09.suo new file mode 100644 index 0000000000000000000000000000000000000000..17bc1a5769eb46bbf6ab231bc16efdd1d2fd82b8 GIT binary patch literal 25600 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 ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/CheckMe/CheckMe.vcproj b/Chapter09/CheckMe/CheckMe.vcproj new file mode 100644 index 0000000..e4efc2f --- /dev/null +++ b/Chapter09/CheckMe/CheckMe.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/CheckMe/Form1.h b/Chapter09/CheckMe/Form1.h new file mode 100644 index 0000000..e4185c9 --- /dev/null +++ b/Chapter09/CheckMe/Form1.h @@ -0,0 +1,138 @@ +#pragma once + +namespace CheckMe +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::CheckBox^ BottomCheck; + System::Windows::Forms::CheckBox^ checkBox2; + System::Windows::Forms::CheckBox^ checkBox1; + System::Windows::Forms::CheckBox^ TopCheck; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->BottomCheck = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox2 = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox1 = (gcnew System::Windows::Forms::CheckBox()); + this->TopCheck = (gcnew System::Windows::Forms::CheckBox()); + this->SuspendLayout(); + // + // BottomCheck + // + this->BottomCheck->AutoSize = true; + this->BottomCheck->Enabled = false; + this->BottomCheck->Location = System::Drawing::Point(52, 167); + this->BottomCheck->Name = L"BottomCheck"; + this->BottomCheck->Size = System::Drawing::Size(127, 17); + this->BottomCheck->TabIndex = 4; + this->BottomCheck->TabStop = false; + this->BottomCheck->Text = L"You Can\'t Check Me!"; + this->BottomCheck->Visible = false; + this->BottomCheck->Enter += + gcnew System::EventHandler(this, &Form1::BottomCheck_Enter); + this->BottomCheck->MouseEnter += + gcnew System::EventHandler(this, &Form1::BottomCheck_Enter); + // + // checkBox2 + // + this->checkBox2->AutoSize = true; + this->checkBox2->Location = System::Drawing::Point(52, 130); + this->checkBox2->Name = L"checkBox2"; + this->checkBox2->Size = System::Drawing::Size(106, 17); + this->checkBox2->TabIndex = 5; + this->checkBox2->Text = L"Don\'t Forget ME!"; + // + // checkBox1 + // + this->checkBox1->AutoSize = true; + this->checkBox1->Checked = true; + this->checkBox1->CheckState = + System::Windows::Forms::CheckState::Indeterminate; + this->checkBox1->Location = System::Drawing::Point(52, 90); + this->checkBox1->Name = L"checkBox1"; + this->checkBox1->Size = System::Drawing::Size(133, 17); + this->checkBox1->TabIndex = 2; + this->checkBox1->Text = L"Check Me! Check Me!"; + this->checkBox1->ThreeState = true; + // + // TopCheck + // + this->TopCheck->AutoSize = true; + this->TopCheck->Location = System::Drawing::Point(52, 49); + this->TopCheck->Name = L"TopCheck"; + this->TopCheck->Size = System::Drawing::Size(127, 17); + this->TopCheck->TabIndex = 3; + this->TopCheck->TabStop = false; + this->TopCheck->Text = L"You Can\'t Check Me!"; + this->TopCheck->Enter += + gcnew System::EventHandler(this, &Form1::TopCheck_Enter); + this->TopCheck->MouseEnter += + gcnew System::EventHandler(this, &Form1::TopCheck_Enter); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(242, 273); + this->Controls->Add(this->BottomCheck); + this->Controls->Add(this->checkBox2); + this->Controls->Add(this->checkBox1); + this->Controls->Add(this->TopCheck); + this->Name = L"Form1"; + this->Text = L"Can\'t Check Me"; + this->ResumeLayout(false); + this->PerformLayout(); + } +#pragma endregion + + private: + System::Void TopCheck_Enter(System::Object^ sender, + System::EventArgs^ e) + { + // Hide Top checkbox and display bottom + TopCheck->Enabled = false; + TopCheck->Visible = false; + BottomCheck->Enabled = true; + BottomCheck->Visible = true; + } + + private: + System::Void BottomCheck_Enter(System::Object^ sender, + System::EventArgs^ e) + { + // Hide Bottom checkbox and display top + BottomCheck->Enabled = false; + BottomCheck->Visible = false; + TopCheck->Enabled = true; + TopCheck->Visible = true; + } + }; +} + diff --git a/Chapter09/CheckMe/Form1.resx b/Chapter09/CheckMe/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/CheckMe/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/CheckMe/stdafx.cpp b/Chapter09/CheckMe/stdafx.cpp new file mode 100644 index 0000000..cf33cba --- /dev/null +++ b/Chapter09/CheckMe/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// CheckMe.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/CheckMe/stdafx.h b/Chapter09/CheckMe/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/CheckMe/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/CustomHello/AssemblyInfo.cpp b/Chapter09/CustomHello/AssemblyInfo.cpp new file mode 100644 index 0000000..54c4e3a --- /dev/null +++ b/Chapter09/CustomHello/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("CustomHello")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("CustomHello")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/CustomHello/CustomHello.cpp b/Chapter09/CustomHello/CustomHello.cpp new file mode 100644 index 0000000..295cacb --- /dev/null +++ b/Chapter09/CustomHello/CustomHello.cpp @@ -0,0 +1,18 @@ +// CustomHello.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace CustomHello; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/CustomHello/CustomHello.vcproj b/Chapter09/CustomHello/CustomHello.vcproj new file mode 100644 index 0000000..f5e8ca3 --- /dev/null +++ b/Chapter09/CustomHello/CustomHello.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/CustomHello/Form1.h b/Chapter09/CustomHello/Form1.h new file mode 100644 index 0000000..220a6a1 --- /dev/null +++ b/Chapter09/CustomHello/Form1.h @@ -0,0 +1,56 @@ +#pragma once + +namespace CustomHello +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + // + // Form1 + // + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->BackColor = System::Drawing::Color::Black; + this->ClientSize = System::Drawing::Size(692, 274); + this->Cursor = System::Windows::Forms::Cursors::UpArrow; + this->FormBorderStyle = + System::Windows::Forms::FormBorderStyle::SizableToolWindow; + this->Name = L"Form1"; + this->SizeGripStyle = System::Windows::Forms::SizeGripStyle::Show; + this->Text = L"Custom Form"; + this->TopMost = true; + this->ResumeLayout(false); + } + +#pragma endregion + }; +} + diff --git a/Chapter09/CustomHello/Form1.resx b/Chapter09/CustomHello/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/CustomHello/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/CustomHello/stdafx.cpp b/Chapter09/CustomHello/stdafx.cpp new file mode 100644 index 0000000..8ba14ba --- /dev/null +++ b/Chapter09/CustomHello/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// CustomHello.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/CustomHello/stdafx.h b/Chapter09/CustomHello/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/CustomHello/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/GroupingRadios/AssemblyInfo.cpp b/Chapter09/GroupingRadios/AssemblyInfo.cpp new file mode 100644 index 0000000..c71b4fb --- /dev/null +++ b/Chapter09/GroupingRadios/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("GroupingRadios")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("GroupingRadios")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/GroupingRadios/Form1.h b/Chapter09/GroupingRadios/Form1.h new file mode 100644 index 0000000..8192fce --- /dev/null +++ b/Chapter09/GroupingRadios/Form1.h @@ -0,0 +1,135 @@ +#pragma once + +namespace GroupingRadios +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + BuildRadios(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::GroupBox^ groupBox2; + System::Windows::Forms::GroupBox^ groupBox1; + + array^ radio1; + array^ radio2; + array^ radio3; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->groupBox2 = (gcnew System::Windows::Forms::GroupBox()); + this->groupBox1 = (gcnew System::Windows::Forms::GroupBox()); + this->SuspendLayout(); + // + // groupBox2 + // + this->groupBox2->Location = System::Drawing::Point(125, 153); + this->groupBox2->Name = L"groupBox2"; + this->groupBox2->Size = System::Drawing::Size(152, 134); + this->groupBox2->TabIndex = 3; + this->groupBox2->TabStop = false; + this->groupBox2->Text = L"Use"; + // + // groupBox1 + // + this->groupBox1->Location = System::Drawing::Point(125, 12); + this->groupBox1->Name = L"groupBox1"; + this->groupBox1->Size = System::Drawing::Size(152, 135); + this->groupBox1->TabIndex = 2; + this->groupBox1->TabStop = false; + this->groupBox1->Text = L"You"; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(352, 330); + this->Controls->Add(this->groupBox2); + this->Controls->Add(this->groupBox1); + this->Name = L"Form1"; + this->Text = L"Using Group Boxes"; + this->ResumeLayout(false); + } + +#pragma endregion + + void BuildRadios() + { + this->SuspendLayout(); + + // Text for RadioButton places on Form directly + array^ rbText1 = gcnew array { + L"Can", L"You", L"Click", L"More", L"Than", L"One" + }; + + // Build a RadioButton for each rbText1 + radio1 = gcnew array(6); + for (int i = 0; i < radio1->Length; i++) + { + radio1[i] = gcnew RadioButton(); + radio1[i]->Location = Drawing::Point(20, 20+(40*i)); + radio1[i]->Text = rbText1[i]; + } + // Add RadioButtons to Form + Controls->AddRange(radio1); + + // Text for RadioButton places in first GroupBox + array^ rbText2 = gcnew array { + L"Can", L"If", L"You" + }; + + // Build a RadioButton for each rbText2 + radio2 = gcnew array(3); + for (int i = 0; i < radio2->Length; i++) + { + radio2[i] = gcnew RadioButton(); + radio2[i]->Location = Drawing::Point(40, 30+(35*i)); + radio2[i]->Text = rbText2[i]; + } + // Add RadioButtons to GroupBox + groupBox1->Controls->AddRange(radio2); + + // Text for RadioButton places in second GroupBox + array^ rbText3 = gcnew array { + L"Different", L"Group", L"Boxes" + }; + + // Build a RadioButton for each rbText3 + radio3 = gcnew array(3); + for (int i = 0; i < radio3->Length; i++) + { + radio3[i] = gcnew RadioButton(); + radio3[i]->Location = Drawing::Point(40, 30+(35*i)); + radio3[i]->Text = rbText3[i]; + } + // Add RadioButtons to GroupBox2 + groupBox2->Controls->AddRange(radio3); + + this->ResumeLayout(false); + } + }; +} \ No newline at end of file diff --git a/Chapter09/GroupingRadios/Form1.resx b/Chapter09/GroupingRadios/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/GroupingRadios/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/GroupingRadios/GroupingRadios.cpp b/Chapter09/GroupingRadios/GroupingRadios.cpp new file mode 100644 index 0000000..38c3f61 --- /dev/null +++ b/Chapter09/GroupingRadios/GroupingRadios.cpp @@ -0,0 +1,18 @@ +// GroupingRadios.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace GroupingRadios; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/GroupingRadios/GroupingRadios.vcproj b/Chapter09/GroupingRadios/GroupingRadios.vcproj new file mode 100644 index 0000000..34a8285 --- /dev/null +++ b/Chapter09/GroupingRadios/GroupingRadios.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/GroupingRadios/stdafx.cpp b/Chapter09/GroupingRadios/stdafx.cpp new file mode 100644 index 0000000..22a4e7a --- /dev/null +++ b/Chapter09/GroupingRadios/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// GroupingRadios.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/GroupingRadios/stdafx.h b/Chapter09/GroupingRadios/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/GroupingRadios/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/Hello/AssemblyInfo.cpp b/Chapter09/Hello/AssemblyInfo.cpp new file mode 100644 index 0000000..80a9272 --- /dev/null +++ b/Chapter09/Hello/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("Hello")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("Hello")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/Hello/Form1.h b/Chapter09/Hello/Form1.h new file mode 100644 index 0000000..66602f4 --- /dev/null +++ b/Chapter09/Hello/Form1.h @@ -0,0 +1,71 @@ +#pragma once + +namespace Hello +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + ///

+ /// Summary for Form1 + /// + /// WARNING: If you change the name of this class, you will need to change + /// the 'Resource File Name' property for the managed resource + /// compiler tool associated with all .resx files this class + /// depends on. Otherwise, the designers will not be able to + /// interact properly with localized resources associated with + /// this form. + /// + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + // + //TODO: Add the constructor code here + // + } + + protected: + /// + /// Clean up any resources being used. + /// + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + /// + /// Required designer variable. + /// + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + void InitializeComponent(void) + { + this->SuspendLayout(); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Hello World!"; + this->ResumeLayout(false); + } +#pragma endregion + }; +} diff --git a/Chapter09/Hello/Form1.resx b/Chapter09/Hello/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/Hello/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/Hello/Hello.cpp b/Chapter09/Hello/Hello.cpp new file mode 100644 index 0000000..9773c2d --- /dev/null +++ b/Chapter09/Hello/Hello.cpp @@ -0,0 +1,18 @@ +// Hello.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace Hello; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/Hello/Hello.vcproj b/Chapter09/Hello/Hello.vcproj new file mode 100644 index 0000000..414920b --- /dev/null +++ b/Chapter09/Hello/Hello.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/Hello/stdafx.cpp b/Chapter09/Hello/stdafx.cpp new file mode 100644 index 0000000..f89dfd1 --- /dev/null +++ b/Chapter09/Hello/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// Hello.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/Hello/stdafx.h b/Chapter09/Hello/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/Hello/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/ListTransfers/AssemblyInfo.cpp b/Chapter09/ListTransfers/AssemblyInfo.cpp new file mode 100644 index 0000000..e18fc34 --- /dev/null +++ b/Chapter09/ListTransfers/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ListTransfers")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ListTransfers")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/ListTransfers/Form1.h b/Chapter09/ListTransfers/Form1.h new file mode 100644 index 0000000..0cf80e2 --- /dev/null +++ b/Chapter09/ListTransfers/Form1.h @@ -0,0 +1,187 @@ +#pragma once + +namespace ListTransfers +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::ListBox^ LBDest; + System::Windows::Forms::Button^ bnR2L; + System::Windows::Forms::Button^ bnL2R; + System::Windows::Forms::ListBox^ LBOrg; + System::Windows::Forms::Label^ label2; + System::Windows::Forms::Label^ label1; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->LBDest = (gcnew System::Windows::Forms::ListBox()); + this->bnR2L = (gcnew System::Windows::Forms::Button()); + this->bnL2R = (gcnew System::Windows::Forms::Button()); + this->LBOrg = (gcnew System::Windows::Forms::ListBox()); + this->label2 = (gcnew System::Windows::Forms::Label()); + this->label1 = (gcnew System::Windows::Forms::Label()); + this->SuspendLayout(); + // + // LBDest + // + this->LBDest->FormattingEnabled = true; + this->LBDest->Location = System::Drawing::Point(213, 46); + this->LBDest->Name = L"LBDest"; + this->LBDest->SelectionMode = + System::Windows::Forms::SelectionMode::MultiSimple; + this->LBDest->Size = System::Drawing::Size(134, 134); + this->LBDest->TabIndex = 10; + this->LBDest->DoubleClick += + gcnew System::EventHandler(this, &Form1::LBDest_DoubleClick); + // + // bnR2L + // + this->bnR2L->Location = System::Drawing::Point(167, 108); + this->bnR2L->Name = L"bnR2L"; + this->bnR2L->Size = System::Drawing::Size(33, 20); + this->bnR2L->TabIndex = 9; + this->bnR2L->Text = L"<=="; + this->bnR2L->Click += + gcnew System::EventHandler(this, &Form1::bnR2L_Click); + // + // bnL2R + // + this->bnL2R->Location = System::Drawing::Point(167, 80); + this->bnL2R->Name = L"bnL2R"; + this->bnL2R->Size = System::Drawing::Size(33, 20); + this->bnL2R->TabIndex = 8; + this->bnL2R->Text = L"==>"; + this->bnL2R->Click += + gcnew System::EventHandler(this, &Form1::bnL2R_Click); + // + // LBOrg + // + this->LBOrg->FormattingEnabled = true; + this->LBOrg->Items->AddRange(gcnew cli::array< System::Object^>(10) + {L"System", L"System::Collections", L"System::Data", + L"System::Drawing", L"System::IO", L"System::Net", + L"System::Threading", L"System::Web", + L"System::Windows::Forms", L"System::Xml"}); + this->LBOrg->Location = System::Drawing::Point(20, 46); + this->LBOrg->Name = L"LBOrg"; + this->LBOrg->SelectionMode = + System::Windows::Forms::SelectionMode::MultiExtended; + this->LBOrg->Size = System::Drawing::Size(133, 134); + this->LBOrg->Sorted = true; + this->LBOrg->TabIndex = 6; + this->LBOrg->DoubleClick += + gcnew System::EventHandler(this, &Form1::LBOrg_DoubleClick); + // + // label2 + // + this->label2->AutoSize = true; + this->label2->Location = System::Drawing::Point(213, 17); + this->label2->Name = L"label2"; + this->label2->Size = System::Drawing::Size(104, 13); + this->label2->TabIndex = 7; + this->label2->Text = L"Unsorted Multisimple"; + // + // label1 + // + this->label1->AutoSize = true; + this->label1->Location = System::Drawing::Point(20, 17); + this->label1->Name = L"label1"; + this->label1->Size = System::Drawing::Size(107, 13); + this->label1->TabIndex = 5; + this->label1->Text = L"Sorted Multiextended"; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(367, 196); + this->Controls->Add(this->LBDest); + this->Controls->Add(this->bnR2L); + this->Controls->Add(this->bnL2R); + this->Controls->Add(this->LBOrg); + this->Controls->Add(this->label2); + this->Controls->Add(this->label1); + this->Name = L"Form1"; + this->Text = L"List Box Transfers"; + this->ResumeLayout(false); + this->PerformLayout(); + } + +#pragma endregion + + private: + System::Void LBOrg_DoubleClick(System::Object^ sender, + System::EventArgs^ e) + { + // Add Selected item to other ListBox + // Then remove item from original + if (LBOrg->SelectedItem != nullptr) + { + LBDest->Items->Add(LBOrg->SelectedItem); + LBOrg->Items->Remove(LBOrg->SelectedItem); + } + } + + System::Void LBDest_DoubleClick(System::Object^ sender, + System::EventArgs^ e) + { + // Add Selected item to other ListBox + // Then remove item from original + if (LBDest->SelectedItem != nullptr) + { + LBOrg->Items->Add(LBDest->SelectedItem); + LBDest->Items->Remove(LBDest->SelectedItem); + } + } + + System::Void bnL2R_Click(System::Object^ sender, System::EventArgs^ e) + { + // Add all Selected items to other ListBox + // Then remove the all items from original + array^ tmp = + gcnew array(LBOrg->SelectedItems->Count); + LBOrg->SelectedItems->CopyTo(tmp, 0); + LBDest->Items->AddRange(tmp); + for (int i = 0; i < tmp->Length; i++) + LBOrg->Items->Remove(tmp[i]); + } + + System::Void bnR2L_Click(System::Object^ sender, System::EventArgs^ e) + { + // Add all Selected items to other ListBox + // Then remove all the items from original + array^ tmp = + gcnew array(LBDest->SelectedItems->Count); + LBDest->SelectedItems->CopyTo(tmp, 0); + LBOrg->Items->AddRange(tmp); + for (int i = 0; i < tmp->Length; i++) + LBDest->Items->Remove(tmp[i]); + } + }; +} \ No newline at end of file diff --git a/Chapter09/ListTransfers/Form1.resx b/Chapter09/ListTransfers/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/ListTransfers/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/ListTransfers/ListTransfers.cpp b/Chapter09/ListTransfers/ListTransfers.cpp new file mode 100644 index 0000000..d2167a1 --- /dev/null +++ b/Chapter09/ListTransfers/ListTransfers.cpp @@ -0,0 +1,18 @@ +// ListTransfers.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace ListTransfers; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/ListTransfers/ListTransfers.vcproj b/Chapter09/ListTransfers/ListTransfers.vcproj new file mode 100644 index 0000000..ea4bd7b --- /dev/null +++ b/Chapter09/ListTransfers/ListTransfers.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/ListTransfers/stdafx.cpp b/Chapter09/ListTransfers/stdafx.cpp new file mode 100644 index 0000000..8930556 --- /dev/null +++ b/Chapter09/ListTransfers/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ListTransfers.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/ListTransfers/stdafx.h b/Chapter09/ListTransfers/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/ListTransfers/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/MightyLabel/AssemblyInfo.cpp b/Chapter09/MightyLabel/AssemblyInfo.cpp new file mode 100644 index 0000000..c4f0b11 --- /dev/null +++ b/Chapter09/MightyLabel/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("MightyLabel")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("MightyLabel")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/MightyLabel/Form1.h b/Chapter09/MightyLabel/Form1.h new file mode 100644 index 0000000..6d02678 --- /dev/null +++ b/Chapter09/MightyLabel/Form1.h @@ -0,0 +1,83 @@ +#pragma once + +namespace MightyLabel +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + labelSwitch = true; + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Label^ MightyLabel; + bool labelSwitch; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->MightyLabel = (gcnew System::Windows::Forms::Label()); + this->SuspendLayout(); + // + // MightyLabel + // + this->MightyLabel->BorderStyle = + System::Windows::Forms::BorderStyle::FixedSingle; + this->MightyLabel->Cursor = System::Windows::Forms::Cursors::Hand; + this->MightyLabel->Location = System::Drawing::Point(63, 91); + this->MightyLabel->Name = L"MightyLabel"; + this->MightyLabel->Size = System::Drawing::Size(150, 35); + this->MightyLabel->TabIndex = 1; + this->MightyLabel->Text = + L"This is the mighty label! It will change when you click it"; + this->MightyLabel->TextAlign = + System::Drawing::ContentAlignment::MiddleCenter; + this->MightyLabel->Click += + gcnew System::EventHandler(this, &Form1::MightyLabel_Click); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Controls->Add(this->MightyLabel); + this->Name = L"Form1"; + this->Text = L"The Mighty Label"; + this->ResumeLayout(false); + } + +#pragma endregion + + private: + System::Void MightyLabel_Click(System::Object^ sender, + System::EventArgs^ e) + { + if (labelSwitch) + MightyLabel->Text = L"Ouchie!!! That hurt."; + else + MightyLabel->Text = L"Ooo!!! That tickled."; + labelSwitch = !labelSwitch; + } + }; +} \ No newline at end of file diff --git a/Chapter09/MightyLabel/Form1.resx b/Chapter09/MightyLabel/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/MightyLabel/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/MightyLabel/MightyLabel.cpp b/Chapter09/MightyLabel/MightyLabel.cpp new file mode 100644 index 0000000..3e7a30d --- /dev/null +++ b/Chapter09/MightyLabel/MightyLabel.cpp @@ -0,0 +1,18 @@ +// MightyLabel.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace MightyLabel; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/MightyLabel/MightyLabel.vcproj b/Chapter09/MightyLabel/MightyLabel.vcproj new file mode 100644 index 0000000..2f5d33f --- /dev/null +++ b/Chapter09/MightyLabel/MightyLabel.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/MightyLabel/stdafx.cpp b/Chapter09/MightyLabel/stdafx.cpp new file mode 100644 index 0000000..66e705a --- /dev/null +++ b/Chapter09/MightyLabel/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MightyLabel.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/MightyLabel/stdafx.h b/Chapter09/MightyLabel/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/MightyLabel/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/MinuteTimer/AssemblyInfo.cpp b/Chapter09/MinuteTimer/AssemblyInfo.cpp new file mode 100644 index 0000000..e90c63b --- /dev/null +++ b/Chapter09/MinuteTimer/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("MinuteTimer")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("MinuteTimer")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/MinuteTimer/Form1.h b/Chapter09/MinuteTimer/Form1.h new file mode 100644 index 0000000..e8030d2 --- /dev/null +++ b/Chapter09/MinuteTimer/Form1.h @@ -0,0 +1,103 @@ +#pragma once + +namespace MinuteTimer +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + seconds = 0; + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::ProgressBar^ progressBar; + System::Windows::Forms::Label^ lbsecs; + System::Windows::Forms::Timer^ timer; + + int seconds; + + System::ComponentModel::IContainer^ components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->components = (gcnew System::ComponentModel::Container()); + this->progressBar = (gcnew System::Windows::Forms::ProgressBar()); + this->lbsecs = (gcnew System::Windows::Forms::Label()); + this->timer = + (gcnew System::Windows::Forms::Timer(this->components)); + this->SuspendLayout(); + // + // progressBar + // + this->progressBar->Location = System::Drawing::Point(61, 16); + this->progressBar->Maximum = 60; + this->progressBar->Name = L"progressBar"; + this->progressBar->Size = System::Drawing::Size(326, 23); + this->progressBar->TabIndex = 3; + // + // lbsecs + // + this->lbsecs->AutoSize = true; + this->lbsecs->Location = System::Drawing::Point(19, 25); + this->lbsecs->Name = L"lbsecs"; + this->lbsecs->Size = System::Drawing::Size(13, 13); + this->lbsecs->TabIndex = 2; + this->lbsecs->Text = L"0"; + this->lbsecs->TextAlign = + System::Drawing::ContentAlignment::MiddleRight; + // + // timer + // + this->timer->Enabled = true; + this->timer->Tick += + gcnew System::EventHandler(this, &Form1::timer_Tick); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(407, 55); + this->Controls->Add(this->progressBar); + this->Controls->Add(this->lbsecs); + this->Name = L"Form1"; + this->Text = L"One minute timer"; + this->ResumeLayout(false); + this->PerformLayout(); + } + +#pragma endregion + + private: + System::Void timer_Tick(System::Object^ sender, System::EventArgs^ e) + { + // Write current tick count (int 10th of second) to label + seconds++; + seconds %= 600; + lbsecs->Text = String::Format("{0}.{1}", (seconds/10).ToString(), + (seconds%10).ToString()); + // Update ProgressBar + progressBar->Value = seconds/10; + } + }; +} + diff --git a/Chapter09/MinuteTimer/Form1.resx b/Chapter09/MinuteTimer/Form1.resx new file mode 100644 index 0000000..afe614d --- /dev/null +++ b/Chapter09/MinuteTimer/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter09/MinuteTimer/MinuteTimer.cpp b/Chapter09/MinuteTimer/MinuteTimer.cpp new file mode 100644 index 0000000..6988982 --- /dev/null +++ b/Chapter09/MinuteTimer/MinuteTimer.cpp @@ -0,0 +1,18 @@ +// MinuteTimer.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace MinuteTimer; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/MinuteTimer/MinuteTimer.vcproj b/Chapter09/MinuteTimer/MinuteTimer.vcproj new file mode 100644 index 0000000..64ebb36 --- /dev/null +++ b/Chapter09/MinuteTimer/MinuteTimer.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/MinuteTimer/stdafx.cpp b/Chapter09/MinuteTimer/stdafx.cpp new file mode 100644 index 0000000..5ff6b30 --- /dev/null +++ b/Chapter09/MinuteTimer/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MinuteTimer.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/MinuteTimer/stdafx.h b/Chapter09/MinuteTimer/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/MinuteTimer/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/MouseJump/AssemblyInfo.cpp b/Chapter09/MouseJump/AssemblyInfo.cpp new file mode 100644 index 0000000..fee978c --- /dev/null +++ b/Chapter09/MouseJump/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("MouseJump")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("MouseJump")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/MouseJump/Form1.h b/Chapter09/MouseJump/Form1.h new file mode 100644 index 0000000..41d902f --- /dev/null +++ b/Chapter09/MouseJump/Form1.h @@ -0,0 +1,92 @@ +#pragma once + +namespace MouseJump +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(450, 300); + this->Name = L"Form1"; + this->Text = L"Mouse Jump"; + this->MouseDown += + gcnew System::Windows::Forms::MouseEventHandler(this, + &Form1::Form1_MouseDown); + this->ResumeLayout(false); + } + +#pragma endregion + + private: + System::Void Form1_MouseDown(System::Object^ sender, + System::Windows::Forms::MouseEventArgs^ e) + { + // Get mouse x and y coordinates + int x = e->X; + int y = e->Y; + + // Get Forms upper left location + Point loc = DesktopLocation; + + // Handle left button mouse click + if (e->Button == Windows::Forms::MouseButtons::Left) + { + Text = String::Format("Mouse Jump - Left Button at {0},{1}", + x, y); + + DesktopLocation = Drawing::Point(loc.X + x, loc.Y +y); + } + // Handle right button mouse click + else if (e->Button == Windows::Forms::MouseButtons::Right) + { + Text = String::Format("Mouse Jump - Right Button at {0},{1}", + x, y); + + DesktopLocation = Point((loc.X+1) - (ClientSize.Width - x), + (loc.Y+1) - (ClientSize.Height - y)); + } + // Handle middle button mouse click + else + { + Text = String::Format("Mouse Jump - Middle Button at {0},{1}", + x, y); + DesktopLocation = Point((loc.X+1) - ((ClientSize.Width/2) - x), + (loc.Y+1) - ((ClientSize.Height/2) - y)); + } + } + }; +} + diff --git a/Chapter09/MouseJump/Form1.resx b/Chapter09/MouseJump/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/MouseJump/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/MouseJump/MouseJump.cpp b/Chapter09/MouseJump/MouseJump.cpp new file mode 100644 index 0000000..ec1cb0c --- /dev/null +++ b/Chapter09/MouseJump/MouseJump.cpp @@ -0,0 +1,18 @@ +// MouseJump.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace MouseJump; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/MouseJump/MouseJump.vcproj b/Chapter09/MouseJump/MouseJump.vcproj new file mode 100644 index 0000000..ef59a01 --- /dev/null +++ b/Chapter09/MouseJump/MouseJump.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/MouseJump/stdafx.cpp b/Chapter09/MouseJump/stdafx.cpp new file mode 100644 index 0000000..2d61dd7 --- /dev/null +++ b/Chapter09/MouseJump/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MouseJump.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/MouseJump/stdafx.h b/Chapter09/MouseJump/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/MouseJump/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/Panels/AssemblyInfo.cpp b/Chapter09/Panels/AssemblyInfo.cpp new file mode 100644 index 0000000..e85e529 --- /dev/null +++ b/Chapter09/Panels/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("Panels")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("Panels")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/Panels/Form1.h b/Chapter09/Panels/Form1.h new file mode 100644 index 0000000..1e441a0 --- /dev/null +++ b/Chapter09/Panels/Form1.h @@ -0,0 +1,142 @@ +#pragma once + +namespace Panels +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Panel^ Rightpanel; + System::Windows::Forms::Button^ button2; + System::Windows::Forms::Button^ button1; + System::Windows::Forms::Panel^ Leftpanel; + System::Windows::Forms::Button^ bnHide; + System::Windows::Forms::Button^ bnDisable; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->Rightpanel = (gcnew System::Windows::Forms::Panel()); + this->button2 = (gcnew System::Windows::Forms::Button()); + this->button1 = (gcnew System::Windows::Forms::Button()); + this->Leftpanel = (gcnew System::Windows::Forms::Panel()); + this->bnHide = (gcnew System::Windows::Forms::Button()); + this->bnDisable = (gcnew System::Windows::Forms::Button()); + this->Rightpanel->SuspendLayout(); + this->Leftpanel->SuspendLayout(); + this->SuspendLayout(); + // + // Rightpanel + // + this->Rightpanel->AutoScroll = true; + this->Rightpanel->BorderStyle = + System::Windows::Forms::BorderStyle::Fixed3D; + this->Rightpanel->Controls->Add(this->button2); + this->Rightpanel->Controls->Add(this->button1); + this->Rightpanel->Location = System::Drawing::Point(161, 22); + this->Rightpanel->Name = L"Rightpanel"; + this->Rightpanel->Size = System::Drawing::Size(121, 60); + this->Rightpanel->TabIndex = 3; + // + // button2 + // + this->button2->Location = System::Drawing::Point(20, 62); + this->button2->Name = L"button2"; + this->button2->Size = System::Drawing::Size(75, 23); + this->button2->TabIndex = 1; + this->button2->Text = L"button 2"; + // + // button1 + // + this->button1->Location = System::Drawing::Point(20, 7); + this->button1->Name = L"button1"; + this->button1->Size = System::Drawing::Size(75, 23); + this->button1->TabIndex = 0; + this->button1->Text = L"button 1"; + // + // Leftpanel + // + this->Leftpanel->BorderStyle = + System::Windows::Forms::BorderStyle::FixedSingle; + this->Leftpanel->Controls->Add(this->bnHide); + this->Leftpanel->Controls->Add(this->bnDisable); + this->Leftpanel->Location = System::Drawing::Point(28, 22); + this->Leftpanel->Name = L"Leftpanel"; + this->Leftpanel->Size = System::Drawing::Size(120, 95); + this->Leftpanel->TabIndex = 2; + // + // bnHide + // + this->bnHide->Location = System::Drawing::Point(17, 62); + this->bnHide->Name = L"bnHide"; + this->bnHide->Size = System::Drawing::Size(75, 23); + this->bnHide->TabIndex = 1; + this->bnHide->Text = L"Hide"; + this->bnHide->Click += + gcnew System::EventHandler(this, &Form1::bnHide_Click); + // + // bnDisable + // + this->bnDisable->Location = System::Drawing::Point(17, 7); + this->bnDisable->Name = L"bnDisable"; + this->bnDisable->Size = System::Drawing::Size(75, 23); + this->bnDisable->TabIndex = 0; + this->bnDisable->Text = L"Disable"; + this->bnDisable->Click += + gcnew System::EventHandler(this, &Form1::bnDisable_Click); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(310, 139); + this->Controls->Add(this->Rightpanel); + this->Controls->Add(this->Leftpanel); + this->Name = L"Form1"; + this->Text = L"A hidden fourth button"; + this->Rightpanel->ResumeLayout(false); + this->Leftpanel->ResumeLayout(false); + this->ResumeLayout(false); + } + +#pragma endregion + + private: + System::Void bnDisable_Click(System::Object^ sender, + System::EventArgs^ e) + { + Rightpanel->Enabled = !Rightpanel->Enabled; + } + + private: + System::Void bnHide_Click(System::Object^ sender, System::EventArgs^ e) + { + Rightpanel->Visible = !Rightpanel->Visible; + } + }; +} + diff --git a/Chapter09/Panels/Form1.resx b/Chapter09/Panels/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/Panels/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/Panels/Panels.cpp b/Chapter09/Panels/Panels.cpp new file mode 100644 index 0000000..918832f --- /dev/null +++ b/Chapter09/Panels/Panels.cpp @@ -0,0 +1,18 @@ +// Panels.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace Panels; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/Panels/Panels.vcproj b/Chapter09/Panels/Panels.vcproj new file mode 100644 index 0000000..aa5deae --- /dev/null +++ b/Chapter09/Panels/Panels.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/Panels/stdafx.cpp b/Chapter09/Panels/stdafx.cpp new file mode 100644 index 0000000..6702ffa --- /dev/null +++ b/Chapter09/Panels/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// Panels.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/Panels/stdafx.h b/Chapter09/Panels/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/Panels/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/RichText/AssemblyInfo.cpp b/Chapter09/RichText/AssemblyInfo.cpp new file mode 100644 index 0000000..d17b6e9 --- /dev/null +++ b/Chapter09/RichText/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("RichText")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("RichText")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/RichText/Chapter01.rtf b/Chapter09/RichText/Chapter01.rtf new file mode 100644 index 0000000000000000000000000000000000000000..b973e9b7d42ec080506434236c9489d5c97f790f GIT binary patch literal 5406 zcmZvgL66)v5{361Ape2cOD>(k%-GHb@F8%5*gK0&VkE}qq6;NaEoLZDCZ$n2M*jPL zRg`*qVqY5FEwWhk>eZ{FK2&M$ZYn!wuOH2Hyt#dGTeYt1uH`e>@pyCn?AiXkbMos$ z)x~k1>%f=ms>`d-x$36${Gi~jojvkz4hLri#JURKGqw=Z5)$K>32UDaW6*ZSx6+*?KHb&ejXi9uEhjq)ljaVe{)@BtDoW7*L)Ad66PDR z)pWO2eO-BQeRgZU2j~<-5YOh`nKyR$$Xw^;^c;%0&Cu_gQ=SBofPDMB3T++UFL8Ea z{MNiq*fv;pX7%HUtJyuc@rpACXX0q;c*>@YW0iE5nN96X?oTYAd%TI+nWpzsuJjOd zsM3CdQD^h)n|l&#vh}U88H^32n#0ND**5pC)n)S{muX80^tE8&r_sC??egyGM^j*1g6VF%oPRYZMn& z7GmH(!7PWk0#v>DFq>sEy;tDxDd=UKeK4bVxC$U@=NJQDMf^Dm2!fGi8f#gVDgM-(H&FmT%f}8Dq3ALD3 zcLvCbcN*Bi46*_apbV3fgcVx1E(qv5Rb+dP3D`mGs1JhN%KSTcxJXX(odm zkVz~}Ou#AGE`?II24Bie(^Sf`R0P;R2=aT9&-E}bU`ft;pXMyiWf!`y{4gQBc2sP? zTW0g0h|yW|zwj;yZjjw(x@R@t5syKvuIVehnyH@7;rPh)!}(T}s1$3a2}v3{s)E7q|t;J@1GENPF^C3#vez){z;PZ(za9t!B`SA(UL$zPMKrQY_mpnN90C2 z+E#EP%wWAqbCWCpi<}VIMY>*T%0=x`o1gTyQcAfG5wWV{ipZZZhkNRx zk_PRk#5KWk5Qv-(a5)4@SgKiC6fxCKL>Zb3J`z}|2f^R{(a=Ny5N#0s`l|EnZc+X? zP~tS#+8<4w7N7T`qRSBVI-ZQEvUF%Qr+_h`KqC}2!LTvs!pjD z>7;$?6e0afeBH5pn_>;DXeeHWC|&ZM5CtN

2qI!6-JY%oMWbJTLGc<+zM=Z;bBt z?#ywa=AqA*9I`h%nL;dM%#0=%h-k>pRR^yn|lTf2n|R9B_E?Ksl4C?ULiN0g8>nt@BLijJ+SmxnHuUN7K-y6EZeLlv5Kl*;y&%$ebxw z3Id+aMkA(Dv^Qd3XxWKI0Ywk+KGMbe6P@_;cCQq%O+xex?^d6Wa zVM*ApWX?gEvd9#iD@VkvjY> zqR&F0$x*-@q8mRk=CSQgdU4D2#SD|m;BzO9w3(?U&eaJ@R&b+%UM=UZOkV(3s#Z8* z6&|6Uh^h$V$gIcYpq7KD)tBf>ozu7BU(~sb2Z9sEbUxjppfneJ_J8iE;7Jm_WcHPu z-(i_?P={8gCMMCGzhGdK8F7PF6SZ#<*_L3+#8lekqlGttYfmAKiuU&|+w|BK-dgD- zocbLaBH`wFnY@Ti@8Iikkt+g&2rNZY@J1t&+%{IZ%Whh;MU{Q4p%j|RZRqUz#Zh1~i4^`B1p$)z(4Xa`Pfq6QI%e2IO z?XiJ&ct9K~YZDPQ!b&%|WCQ)63@&B**Q2%$T=+^5V0Fc-1T6`A<>rm70wzv5_GQV> zX?M zI#b91fb~pM5DY0f?YXLBkJ6sOZLQf zRRR?WW`2!c{L#BIyx~S5Hy}sXJKy9l`MQ@{t3?J`z*UUXB?$ducwc1z#ZtL!@{4KS zeQSQxDFS>{;mQr5G`*sKPfB0nDb-p^@>hOugQG}pkgIXcr`$p5nGrwGBY6ZVGy^19 zdZzr0FZ(`@`i2bMyAv_Q^e{y`6TN97+%Z-vLiOFLiy zRhDdx1~GGga1Fi~rHNN)3;9>!VuKzgA-Q12-2JI(SrPt3q-CUIhDAS*Qh3rFK^f;Z zBxOXENl4ydZ0|^P_~18J%gfhO{gTj&@5%(GgEUt3Ldrbw-=#S{$v!Uu8U5^fA^ZAv Nj*rhj;}zgP{twQwh%f*E literal 0 HcmV?d00001 diff --git a/Chapter09/RichText/Form1.h b/Chapter09/RichText/Form1.h new file mode 100644 index 0000000..24a8ee8 --- /dev/null +++ b/Chapter09/RichText/Form1.h @@ -0,0 +1,169 @@ +#pragma once + +namespace RichText +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + BuildLabels(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::RichTextBox^ rtBox; + + array^ labels; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->rtBox = (gcnew System::Windows::Forms::RichTextBox()); + this->SuspendLayout(); + // + // rtBox + // + this->rtBox->Anchor = + static_cast + ((((System::Windows::Forms::AnchorStyles::Top + | System::Windows::Forms::AnchorStyles::Bottom) + | System::Windows::Forms::AnchorStyles::Left) + | System::Windows::Forms::AnchorStyles::Right)); + this->rtBox->Location = System::Drawing::Point(0, 32); + this->rtBox->Name = L"rtBox"; + this->rtBox->RightMargin = 900; + this->rtBox->ScrollBars = + System::Windows::Forms::RichTextBoxScrollBars::ForcedVertical; + this->rtBox->ShowSelectionMargin = true; + this->rtBox->Size = System::Drawing::Size(950, 488); + this->rtBox->TabIndex = 1; + this->rtBox->Text = L""; + this->rtBox->KeyDown += + gcnew System::Windows::Forms::KeyEventHandler(this, + &Form1::rtBox_KeyDown); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(950, 520); + this->Controls->Add(this->rtBox); + this->Name = L"Form1"; + this->Text = L"(Very Simple Rich Text Editor)"; + this->ResumeLayout(false); + } + +#pragma endregion + + void BuildLabels() + { + array^ rtLabel = gcnew array { + L"F1-Bold", L"F2-Italics", L"F3-Underline", + L"F4-Normal", L"F5-Red", L"F6-Blue", + L"F7-Green", L"F8-Black", L"F9-Load", + L"F10-Save" + }; + labels = gcnew array(10); + + // Build the labels + for (int i = 0; i < labels->Length; i++) + { + labels[i] = gcnew Label(); + labels[i]->BackColor = SystemColors::ControlDark; + labels[i]->BorderStyle = BorderStyle::FixedSingle; + labels[i]->Location = Drawing::Point(5+(95*i), 8); + labels[i]->Size = Drawing::Size(85, 16); + labels[i]->Text = rtLabel[i]; + labels[i]->TextAlign = ContentAlignment::MiddleCenter; + } + // Place labels on the Form + Controls->AddRange(labels); + } + + System::Void rtBox_KeyDown(System::Object^ sender, + System::Windows::Forms::KeyEventArgs^ e) + { + try + { + if (rtBox->SelectionLength > 0) + { + // Change selected text style + FontStyle fs; + switch (e->KeyCode) + { + case Keys::F1: + fs = FontStyle::Bold; + break; + case Keys::F2: + fs = FontStyle::Italic; + break; + case Keys::F3: + fs = FontStyle::Underline; + break; + case Keys::F4: + fs = FontStyle::Regular; + break; + // Change selected text color + case Keys::F5: + rtBox->SelectionColor = Color::Red; + break; + case Keys::F6: + rtBox->SelectionColor = Color::Blue; + break; + case Keys::F7: + rtBox->SelectionColor = Color::Green; + break; + case Keys::F8: + rtBox->SelectionColor = Color::Black; + break; + } + // Do the actual change of the selected text style + if (e->KeyCode >= Keys::F1 && e->KeyCode <= Keys::F4) + { + rtBox->SelectionFont = gcnew Drawing::Font( + rtBox->SelectionFont->FontFamily, + rtBox->SelectionFont->Size, + fs + ); + } + } + // Load hard coded Chapter01.rtf file + else if (e->KeyCode == Keys::F9) + { + rtBox->LoadFile("Chapter01.rtf"); + } + // Save hard coded Chapter01.rtf file + else if (e->KeyCode == Keys::F10) + { + rtBox->SaveFile("Chapter01.rtf", + RichTextBoxStreamType::RichText); + } + } + // Capture any blowups + catch (Exception ^e) + { + MessageBox::Show(String::Format("Error: {0}", e->Message)); + } + } + }; +} + diff --git a/Chapter09/RichText/Form1.resx b/Chapter09/RichText/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/RichText/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/RichText/RichText.cpp b/Chapter09/RichText/RichText.cpp new file mode 100644 index 0000000..0bee821 --- /dev/null +++ b/Chapter09/RichText/RichText.cpp @@ -0,0 +1,18 @@ +// RichText.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace RichText; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/RichText/RichText.vcproj b/Chapter09/RichText/RichText.vcproj new file mode 100644 index 0000000..38330bf --- /dev/null +++ b/Chapter09/RichText/RichText.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/RichText/stdafx.cpp b/Chapter09/RichText/stdafx.cpp new file mode 100644 index 0000000..b4d6081 --- /dev/null +++ b/Chapter09/RichText/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// RichText.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/RichText/stdafx.h b/Chapter09/RichText/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/RichText/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/SplitCLB/AssemblyInfo.cpp b/Chapter09/SplitCLB/AssemblyInfo.cpp new file mode 100644 index 0000000..71054f4 --- /dev/null +++ b/Chapter09/SplitCLB/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SplitCLB")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SplitCLB")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/SplitCLB/Form1.h b/Chapter09/SplitCLB/Form1.h new file mode 100644 index 0000000..ff03da3 --- /dev/null +++ b/Chapter09/SplitCLB/Form1.h @@ -0,0 +1,149 @@ +#pragma once + +namespace SplitCLB +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + array^ Items = gcnew array { + "Appleman", "Challa", "Chand", "Cornell", + "Fraser", "Gunnerson", "Harris", "Rammer", + "Symmonds", "Thomsen", "Troelsen", "Vaughn" + }; + clBox->Items->AddRange(Items); + lBox->Items->AddRange(Items); + + // Create a Check box for each entry in Items array. + cBox = gcnew array(Items->Length); + + int j = cBox->Length/2; + for (int i = 0; i < j; i++) + { + // Build Left Column + cBox[i] = gcnew CheckBox(); + cBox[i]->Location = Drawing::Point(50, 160+(30*i)); + cBox[i]->TabIndex = i+2; + cBox[i]->Text = Items[i]->ToString(); + cBox[i]->CheckStateChanged += + gcnew EventHandler(this, &Form1::cBox_CheckStateChanged); + + // Build Right Column + cBox[i+j] = gcnew CheckBox(); + cBox[i+j]->Location = Drawing::Point(180, 160+(30*i)); + cBox[i+j]->TabIndex = i+j+2; + cBox[i+j]->Text = Items[i+j]->ToString(); + cBox[i+j]->CheckStateChanged += + gcnew EventHandler(this, &Form1::cBox_CheckStateChanged); + } + // Add all CheckBoxes to Form + Controls->AddRange(cBox); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::ListBox^ lBox; + System::Windows::Forms::CheckedListBox^ clBox; + + array^ cBox; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->lBox = (gcnew System::Windows::Forms::ListBox()); + this->clBox = (gcnew System::Windows::Forms::CheckedListBox()); + this->SuspendLayout(); + // + // lBox + // + this->lBox->FormattingEnabled = true; + this->lBox->Location = System::Drawing::Point(356, 32); + this->lBox->Name = L"lBox"; + this->lBox->Size = System::Drawing::Size(120, 264); + this->lBox->TabIndex = 3; + this->lBox->SelectedIndexChanged += + gcnew System::EventHandler(this, + &Form1::lBox_SelectedIndexChanged); + // + // clBox + // + this->clBox->FormattingEnabled = true; + this->clBox->Location = System::Drawing::Point(12, 32); + this->clBox->MultiColumn = true; + this->clBox->Name = L"clBox"; + this->clBox->Size = System::Drawing::Size(323, 79); + this->clBox->TabIndex = 2; + this->clBox->ThreeDCheckBoxes = true; + this->clBox->SelectedIndexChanged += + gcnew System::EventHandler(this, + &Form1::clBox_SelectedIndexChanged); + this->clBox->ItemCheck += + gcnew System::Windows::Forms::ItemCheckEventHandler(this, + &Form1::clBox_ItemCheck); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(494, 392); + this->Controls->Add(this->lBox); + this->Controls->Add(this->clBox); + this->Name = L"Form1"; + this->Text = L"Splitting The Check List Box"; + this->ResumeLayout(false); + } + +#pragma endregion + + private: + System::Void clBox_ItemCheck(System::Object^ sender, + System::Windows::Forms::ItemCheckEventArgs^ e) + { + // update state of CheckBox with same index as checked CheckedListBox + cBox[e->Index]->CheckState = e->NewValue; + } + + System::Void clBox_SelectedIndexChanged(System::Object^ sender, + System::EventArgs^ e) + { + // update ListBox with same selected item in the CheckedListBox + lBox->SelectedItem = clBox->SelectedItem->ToString(); + } + + System::Void lBox_SelectedIndexChanged(System::Object^ sender, + System::EventArgs^ e) + { + // update CheckedListBox with same selected item in the ListBox + clBox->SelectedItem = lBox->SelectedItem; + } + + void cBox_CheckStateChanged(Object^ sender, EventArgs^ e) + { + // update state of CheckedListBox with same index as checked CheckBox + CheckBox^ cb = (CheckBox^)sender; + clBox->SetItemCheckState(Array::IndexOf(cBox, cb), cb->CheckState); + } + }; +} + diff --git a/Chapter09/SplitCLB/Form1.resx b/Chapter09/SplitCLB/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/SplitCLB/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/SplitCLB/SplitCLB.cpp b/Chapter09/SplitCLB/SplitCLB.cpp new file mode 100644 index 0000000..83345c1 --- /dev/null +++ b/Chapter09/SplitCLB/SplitCLB.cpp @@ -0,0 +1,18 @@ +// SplitCLB.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace SplitCLB; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/SplitCLB/SplitCLB.vcproj b/Chapter09/SplitCLB/SplitCLB.vcproj new file mode 100644 index 0000000..6393e2b --- /dev/null +++ b/Chapter09/SplitCLB/SplitCLB.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/SplitCLB/stdafx.cpp b/Chapter09/SplitCLB/stdafx.cpp new file mode 100644 index 0000000..284f34d --- /dev/null +++ b/Chapter09/SplitCLB/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SplitCLB.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/SplitCLB/stdafx.h b/Chapter09/SplitCLB/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/SplitCLB/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/SyncCombos/AssemblyInfo.cpp b/Chapter09/SyncCombos/AssemblyInfo.cpp new file mode 100644 index 0000000..d615057 --- /dev/null +++ b/Chapter09/SyncCombos/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SyncCombos")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SyncCombos")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/SyncCombos/Form1.h b/Chapter09/SyncCombos/Form1.h new file mode 100644 index 0000000..897104b --- /dev/null +++ b/Chapter09/SyncCombos/Form1.h @@ -0,0 +1,136 @@ +#pragma once + +namespace SyncCombos +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + PopulateLists(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::ComboBox^ ddlist; + System::Windows::Forms::ComboBox^ simple; + System::Windows::Forms::ComboBox^ ddown; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->ddlist = (gcnew System::Windows::Forms::ComboBox()); + this->simple = (gcnew System::Windows::Forms::ComboBox()); + this->ddown = (gcnew System::Windows::Forms::ComboBox()); + this->SuspendLayout(); + // + // ddlist + // + this->ddlist->DropDownStyle = + System::Windows::Forms::ComboBoxStyle::DropDownList; + this->ddlist->FormattingEnabled = true; + this->ddlist->Location = System::Drawing::Point(300, 14); + this->ddlist->Name = L"ddlist"; + this->ddlist->Size = System::Drawing::Size(121, 21); + this->ddlist->TabIndex = 5; + this->ddlist->SelectedIndexChanged += + gcnew System::EventHandler(this, &Form1::ddlist_Change); + // + // simple + // + this->simple->DropDownStyle = + System::Windows::Forms::ComboBoxStyle::Simple; + this->simple->FormattingEnabled = true; + this->simple->Location = System::Drawing::Point(154, 11); + this->simple->Name = L"simple"; + this->simple->Size = System::Drawing::Size(122, 117); + this->simple->TabIndex = 4; + this->simple->SelectedIndexChanged += + gcnew System::EventHandler(this, &Form1::simple_Change); + this->simple->TextChanged += + gcnew System::EventHandler(this, &Form1::simple_Change); + // + // ddown + // + this->ddown->FormattingEnabled = true; + this->ddown->Location = System::Drawing::Point(12, 14); + this->ddown->MaxDropDownItems = 3; + this->ddown->MaxLength = 10; + this->ddown->Name = L"ddown"; + this->ddown->Size = System::Drawing::Size(121, 21); + this->ddown->TabIndex = 3; + this->ddown->SelectedIndexChanged += + gcnew System::EventHandler(this, &Form1::ddown_Change); + this->ddown->TextChanged += + gcnew System::EventHandler(this, &Form1::ddown_Change); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(433, 138); + this->Controls->Add(this->ddlist); + this->Controls->Add(this->simple); + this->Controls->Add(this->ddown); + this->Name = L"Form1"; + this->Text = L"Synchronized Combo boxing"; + this->ResumeLayout(false); + } + +#pragma endregion + + private: + void PopulateLists() + { + // Item to be placed in all ComboBoxes + array^ ddItems = gcnew array { + L"oranges", L"cherries", L"apples", + L"lemons", L"bananas", L"grapes" + }; + ddown->Items->AddRange(ddItems); + simple->Items->AddRange(ddItems); + ddlist->Items->AddRange(ddItems); + } + + System::Void ddown_Change(System::Object^ sender, System::EventArgs^ e) + { + // Update simple and dropdownlist with dropdown text + simple->Text = ddown->Text; + ddlist->SelectedItem = ddown->Text; + } + + System::Void simple_Change(System::Object^ sender,System::EventArgs^ e) + { + // Update dropdown and dropdownlist with simple text + ddown->Text = simple->Text; + ddlist->SelectedItem = simple->Text; + } + + System::Void ddlist_Change(System::Object^ sender,System::EventArgs^ e) + { + // Update simple and dropdown with dropdownlist SelectedText + ddown->SelectedItem = ddlist->SelectedItem; + simple->SelectedItem = ddlist->SelectedItem; + } + }; +} + diff --git a/Chapter09/SyncCombos/Form1.resx b/Chapter09/SyncCombos/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/SyncCombos/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/SyncCombos/SyncCombos.cpp b/Chapter09/SyncCombos/SyncCombos.cpp new file mode 100644 index 0000000..8d7538d --- /dev/null +++ b/Chapter09/SyncCombos/SyncCombos.cpp @@ -0,0 +1,18 @@ +// SyncCombos.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace SyncCombos; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/SyncCombos/SyncCombos.vcproj b/Chapter09/SyncCombos/SyncCombos.vcproj new file mode 100644 index 0000000..d65823c --- /dev/null +++ b/Chapter09/SyncCombos/SyncCombos.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/SyncCombos/stdafx.cpp b/Chapter09/SyncCombos/stdafx.cpp new file mode 100644 index 0000000..7d22a35 --- /dev/null +++ b/Chapter09/SyncCombos/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SyncCombos.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/SyncCombos/stdafx.h b/Chapter09/SyncCombos/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/SyncCombos/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/TextEntry/AssemblyInfo.cpp b/Chapter09/TextEntry/AssemblyInfo.cpp new file mode 100644 index 0000000..eca62e2 --- /dev/null +++ b/Chapter09/TextEntry/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("TextEntry")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("TextEntry")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/TextEntry/Form1.h b/Chapter09/TextEntry/Form1.h new file mode 100644 index 0000000..bb11cf7 --- /dev/null +++ b/Chapter09/TextEntry/Form1.h @@ -0,0 +1,238 @@ +#pragma once + +namespace TextEntry +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + DoB = DateTime::MinValue; + + // setting validating type to DateTime + mtbDoB->ValidatingType = DateTime::typeid; + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Button^ bnSubmit; + System::Windows::Forms::Label^ label3; + System::Windows::Forms::TextBox^ tbPassword; + System::Windows::Forms::TextBox^ tbOutput; + System::Windows::Forms::Label^ label2; + System::Windows::Forms::MaskedTextBox^ mtbDoB; + System::Windows::Forms::Label^ label1; + System::Windows::Forms::TextBox^ tbName; + + DateTime^ DoB; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->bnSubmit = (gcnew System::Windows::Forms::Button()); + this->label3 = (gcnew System::Windows::Forms::Label()); + this->tbPassword = (gcnew System::Windows::Forms::TextBox()); + this->tbOutput = (gcnew System::Windows::Forms::TextBox()); + this->label2 = (gcnew System::Windows::Forms::Label()); + this->mtbDoB = (gcnew System::Windows::Forms::MaskedTextBox()); + this->label1 = (gcnew System::Windows::Forms::Label()); + this->tbName = (gcnew System::Windows::Forms::TextBox()); + this->SuspendLayout(); + // + // bnSubmit + // + this->bnSubmit->Location = System::Drawing::Point(260, 36); + this->bnSubmit->Margin = System::Windows::Forms::Padding(1,3,3,3); + this->bnSubmit->Name = L"bnSubmit"; + this->bnSubmit->Size = System::Drawing::Size(56, 20); + this->bnSubmit->TabIndex = 10; + this->bnSubmit->Text = L" Submit"; + this->bnSubmit->Click += + gcnew System::EventHandler(this, &Form1::bnSubmit_Click); + // + // label3 + // + this->label3->AutoSize = true; + this->label3->Location = System::Drawing::Point(14, 232); + this->label3->Name = L"label3"; + this->label3->Size = System::Drawing::Size(56, 13); + this->label3->TabIndex = 14; + this->label3->Text = L"Password:"; + // + // tbPassword + // + this->tbPassword->CausesValidation = false; + this->tbPassword->Location = System::Drawing::Point(78, 226); + this->tbPassword->MaxLength = 16; + this->tbPassword->Name = L"tbPassword"; + this->tbPassword->PasswordChar = '?'; + this->tbPassword->Size = System::Drawing::Size(238, 20); + this->tbPassword->TabIndex = 13; + this->tbPassword->UseSystemPasswordChar = true; + this->tbPassword->WordWrap = false; + this->tbPassword->TextChanged += + gcnew System::EventHandler(this,&Form1::tbPassword_TextChanged); + // + // tbOutput + // + this->tbOutput->Location = System::Drawing::Point(14, 63); + this->tbOutput->Multiline = true; + this->tbOutput->Name = L"tbOutput"; + this->tbOutput->ReadOnly = true; + this->tbOutput->ScrollBars = + System::Windows::Forms::ScrollBars::Vertical; + this->tbOutput->Size = System::Drawing::Size(302, 156); + this->tbOutput->TabIndex = 12; + this->tbOutput->TabStop = false; + // + // label2 + // + this->label2->AutoSize = true; + this->label2->Location = System::Drawing::Point(168, 15); + this->label2->Name = L"label2"; + this->label2->Size = System::Drawing::Size(69, 13); + this->label2->TabIndex = 11; + this->label2->Text = L"Date of Birth:"; + // + // mtbDoB + // + this->mtbDoB->AllowPromptAsInput = false; + this->mtbDoB->BeepOnError = true; + this->mtbDoB->Location = System::Drawing::Point(168, 36); + this->mtbDoB->Margin = System::Windows::Forms::Padding(3,3,1,3); + this->mtbDoB->Mask = L"00/00/0000"; + this->mtbDoB->Name = L"mtbDoB"; + this->mtbDoB->Size = System::Drawing::Size(89, 20); + this->mtbDoB->TabIndex = 8; + this->mtbDoB->TypeValidationCompleted += + gcnew System::Windows::Forms::TypeValidationEventHandler(this, + &Form1::mtbDoB_TypeValidationCompleted); + // + // label1 + // + this->label1->AutoSize = true; + this->label1->Location = System::Drawing::Point(14, 15); + this->label1->Name = L"label1"; + this->label1->Size = System::Drawing::Size(38, 13); + this->label1->TabIndex = 9; + this->label1->Text = L"Name:"; + // + // tbName + // + this->tbName->Location = System::Drawing::Point(14, 36); + this->tbName->Name = L"tbName"; + this->tbName->Size = System::Drawing::Size(147, 20); + this->tbName->TabIndex = 7; + this->tbName->Validating += + gcnew System::ComponentModel::CancelEventHandler(this, + &Form1::tbName_Validating); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(331, 261); + this->Controls->Add(this->bnSubmit); + this->Controls->Add(this->label3); + this->Controls->Add(this->tbPassword); + this->Controls->Add(this->tbOutput); + this->Controls->Add(this->label2); + this->Controls->Add(this->mtbDoB); + this->Controls->Add(this->label1); + this->Controls->Add(this->tbName); + this->Name = L"Form1"; + this->Text = L"Simple entry data entry"; + this->ResumeLayout(false); + this->PerformLayout(); + } + +#pragma endregion + + private: + System::Void bnSubmit_Click(System::Object^ sender, + System::EventArgs^ e) + { + if (tbName->Text->Length <= 0) // Blank name bad! + tbName->Focus(); + else if (*DoB == DateTime::MinValue) // Bad date bad! + mtbDoB->Focus(); + else // Good! + { + // Concatinate name and date of birth and add to output + tbOutput->Text = String::Format("{0} - {1}\r\n{2}", + tbName->Text, mtbDoB->Text, tbOutput->Text); + tbName->Clear(); + mtbDoB->Clear(); + DoB = DateTime::MinValue; + } + } + + System::Void tbPassword_TextChanged(System::Object^ sender, + System::EventArgs^ e) + { + // if the Password TextBox Text equals "Editable" then make + // the multiline TextBox editable and have a tab stop + if (tbPassword->Text->Equals("Editable")) + { + tbOutput->TabStop = true; + tbOutput->ReadOnly = false; + } + else + { + tbOutput->TabStop = false; + tbOutput->ReadOnly = true; + } + } + + System::Void mtbDoB_TypeValidationCompleted(System::Object^ sender, + System::Windows::Forms::TypeValidationEventArgs^ e) + { + // Check to see if the date was valid and less then or equals + // todays date. When false make the MaskedTextBox yellow + // and make DoB MinValue. otherwise set it to normal and make + // DoB the value within MaskedTextBox + if (e->IsValidInput && + (*(DateTime^)e->ReturnValue) <= DateTime::Now) + { + DoB = (DateTime^)e->ReturnValue; + mtbDoB->BackColor = SystemColors::Window; + } + else + { + mtbDoB->BackColor = Color::Yellow; + DoB = DateTime::MinValue; + } + } + + System::Void tbName_Validating(System::Object^ sender, + System::ComponentModel::CancelEventArgs^ e) + { + // Check to make sure there is a name. When false make the + // TextBox yellow. Otherwise set it to normal as all is okay + if (tbName->Text->Length <= 0) + tbName->BackColor = Color::Yellow; + else + tbName->BackColor = SystemColors::Window; + } + }; +} diff --git a/Chapter09/TextEntry/Form1.resx b/Chapter09/TextEntry/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/TextEntry/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/TextEntry/TextEntry.cpp b/Chapter09/TextEntry/TextEntry.cpp new file mode 100644 index 0000000..f008bc8 --- /dev/null +++ b/Chapter09/TextEntry/TextEntry.cpp @@ -0,0 +1,18 @@ +// TextEntry.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace TextEntry; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/TextEntry/TextEntry.vcproj b/Chapter09/TextEntry/TextEntry.vcproj new file mode 100644 index 0000000..8dc36a1 --- /dev/null +++ b/Chapter09/TextEntry/TextEntry.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/TextEntry/stdafx.cpp b/Chapter09/TextEntry/stdafx.cpp new file mode 100644 index 0000000..ecc8ae1 --- /dev/null +++ b/Chapter09/TextEntry/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// TextEntry.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/TextEntry/stdafx.h b/Chapter09/TextEntry/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/TextEntry/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter09/TooManyButtons/AssemblyInfo.cpp b/Chapter09/TooManyButtons/AssemblyInfo.cpp new file mode 100644 index 0000000..9765912 --- /dev/null +++ b/Chapter09/TooManyButtons/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("TooManyButtons")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("TooManyButtons")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter09/TooManyButtons/Form1.h b/Chapter09/TooManyButtons/Form1.h new file mode 100644 index 0000000..6862a37 --- /dev/null +++ b/Chapter09/TooManyButtons/Form1.h @@ -0,0 +1,81 @@ +#pragma once + +namespace TooManyButtons +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::Button^ TooMany; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->TooMany = (gcnew System::Windows::Forms::Button()); + this->SuspendLayout(); + // + // TooMany + // + this->TooMany->Location = System::Drawing::Point(12, 12); + this->TooMany->Name = L"TooMany"; + this->TooMany->Size = System::Drawing::Size(75, 23); + this->TooMany->TabIndex = 1; + this->TooMany->Text = L"Click Me!"; + this->TooMany->Click += + gcnew System::EventHandler(this, &Form1::TooMany_Click); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->AutoScroll = true; + this->ClientSize = System::Drawing::Size(292, 273); + this->Controls->Add(this->TooMany); + this->Name = L"Form1"; + this->Text = L"Too Many Buttons"; + this->ResumeLayout(false); + } + +#pragma endregion + + private: + System::Void TooMany_Click(System::Object^ sender, + System::EventArgs^ e) + { + // Grab the location of the button that was clicked + Point p = ((Button^)sender)->Location; + + // Create a dynamic button + Button ^Many = gcnew Button(); + Many->Location = Drawing::Point(p.X + 36, p.Y + 26); + Many->Text = L"Click Me!"; + Many->Click += gcnew System::EventHandler(this, + &Form1::TooMany_Click); + // Add dynamic button to Form + Controls->Add(Many); + } + }; +} diff --git a/Chapter09/TooManyButtons/Form1.resx b/Chapter09/TooManyButtons/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter09/TooManyButtons/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter09/TooManyButtons/TooManyButtons.cpp b/Chapter09/TooManyButtons/TooManyButtons.cpp new file mode 100644 index 0000000..89f8565 --- /dev/null +++ b/Chapter09/TooManyButtons/TooManyButtons.cpp @@ -0,0 +1,18 @@ +// TooManyButtons.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace TooManyButtons; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter09/TooManyButtons/TooManyButtons.vcproj b/Chapter09/TooManyButtons/TooManyButtons.vcproj new file mode 100644 index 0000000..659bc84 --- /dev/null +++ b/Chapter09/TooManyButtons/TooManyButtons.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter09/TooManyButtons/stdafx.cpp b/Chapter09/TooManyButtons/stdafx.cpp new file mode 100644 index 0000000..d3ad02a --- /dev/null +++ b/Chapter09/TooManyButtons/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// TooManyButtons.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter09/TooManyButtons/stdafx.h b/Chapter09/TooManyButtons/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter09/TooManyButtons/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/Chapter10.sln b/Chapter10/Chapter10.sln new file mode 100644 index 0000000..997a479 --- /dev/null +++ b/Chapter10/Chapter10.sln @@ -0,0 +1,92 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ListViewEx", "ListViewEx\ListViewEx.vcproj", "{A223F2E8-EA2C-4B07-8DD3-9CF46828F84D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TreeViewEx", "TreeViewEx\TreeViewEx.vcproj", "{81576C83-0520-44AF-AC69-E380284D6C52}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TabControlEx", "TabControlEx\TabControlEx.vcproj", "{9FF43562-ECBE-4897-9472-BD3CB5F78996}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SplitContainerEx", "SplitContainerEx\SplitContainerEx.vcproj", "{59A03817-D772-4772-8052-708D94E74508}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ToolStripEx", "ToolStripEx\ToolStripEx.vcproj", "{B68AE121-DC3E-4795-8071-87DD4D29D9A6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StatusStripEx", "StatusStripEx\StatusStripEx.vcproj", "{BC9ACAB2-FD43-4CD1-B3D9-513CC202B073}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimpleMenu", "SimpleMenu\SimpleMenu.vcproj", "{6F7B2B34-C41A-4CA6-B701-3AE0B94A62B3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PictureBoxEx", "PictureBoxEx\PictureBoxEx.vcproj", "{EF6B0287-13FD-45A8-88C2-EB961D9317EB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MonthCalendarEx", "MonthCalendarEx\MonthCalendarEx.vcproj", "{E6DA953C-4580-48FA-B9F6-1B3A65F5F4E8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NotifyIconEx", "NotifyIconEx\NotifyIconEx.vcproj", "{03B06887-B2C1-440C-A852-94545F540B07}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ErrorProviderEx", "ErrorProviderEx\ErrorProviderEx.vcproj", "{D547D9A8-3732-44F6-AF9D-9962F7FA8883}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomDialog", "CustomDialog\CustomDialog.vcproj", "{D5E65699-D8A6-4432-AB41-BA3B59D58CF6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColorDialogEx", "ColorDialogEx\ColorDialogEx.vcproj", "{4B8FC566-68F0-47FD-A13F-550D7CF07EF0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A223F2E8-EA2C-4B07-8DD3-9CF46828F84D}.Debug|Win32.ActiveCfg = Debug|Win32 + {A223F2E8-EA2C-4B07-8DD3-9CF46828F84D}.Debug|Win32.Build.0 = Debug|Win32 + {A223F2E8-EA2C-4B07-8DD3-9CF46828F84D}.Release|Win32.ActiveCfg = Release|Win32 + {A223F2E8-EA2C-4B07-8DD3-9CF46828F84D}.Release|Win32.Build.0 = Release|Win32 + {81576C83-0520-44AF-AC69-E380284D6C52}.Debug|Win32.ActiveCfg = Debug|Win32 + {81576C83-0520-44AF-AC69-E380284D6C52}.Debug|Win32.Build.0 = Debug|Win32 + {81576C83-0520-44AF-AC69-E380284D6C52}.Release|Win32.ActiveCfg = Release|Win32 + {81576C83-0520-44AF-AC69-E380284D6C52}.Release|Win32.Build.0 = Release|Win32 + {9FF43562-ECBE-4897-9472-BD3CB5F78996}.Debug|Win32.ActiveCfg = Debug|Win32 + {9FF43562-ECBE-4897-9472-BD3CB5F78996}.Debug|Win32.Build.0 = Debug|Win32 + {9FF43562-ECBE-4897-9472-BD3CB5F78996}.Release|Win32.ActiveCfg = Release|Win32 + {9FF43562-ECBE-4897-9472-BD3CB5F78996}.Release|Win32.Build.0 = Release|Win32 + {59A03817-D772-4772-8052-708D94E74508}.Debug|Win32.ActiveCfg = Debug|Win32 + {59A03817-D772-4772-8052-708D94E74508}.Debug|Win32.Build.0 = Debug|Win32 + {59A03817-D772-4772-8052-708D94E74508}.Release|Win32.ActiveCfg = Release|Win32 + {59A03817-D772-4772-8052-708D94E74508}.Release|Win32.Build.0 = Release|Win32 + {B68AE121-DC3E-4795-8071-87DD4D29D9A6}.Debug|Win32.ActiveCfg = Debug|Win32 + {B68AE121-DC3E-4795-8071-87DD4D29D9A6}.Debug|Win32.Build.0 = Debug|Win32 + {B68AE121-DC3E-4795-8071-87DD4D29D9A6}.Release|Win32.ActiveCfg = Release|Win32 + {B68AE121-DC3E-4795-8071-87DD4D29D9A6}.Release|Win32.Build.0 = Release|Win32 + {BC9ACAB2-FD43-4CD1-B3D9-513CC202B073}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC9ACAB2-FD43-4CD1-B3D9-513CC202B073}.Debug|Win32.Build.0 = Debug|Win32 + {BC9ACAB2-FD43-4CD1-B3D9-513CC202B073}.Release|Win32.ActiveCfg = Release|Win32 + {BC9ACAB2-FD43-4CD1-B3D9-513CC202B073}.Release|Win32.Build.0 = Release|Win32 + {6F7B2B34-C41A-4CA6-B701-3AE0B94A62B3}.Debug|Win32.ActiveCfg = Debug|Win32 + {6F7B2B34-C41A-4CA6-B701-3AE0B94A62B3}.Debug|Win32.Build.0 = Debug|Win32 + {6F7B2B34-C41A-4CA6-B701-3AE0B94A62B3}.Release|Win32.ActiveCfg = Release|Win32 + {6F7B2B34-C41A-4CA6-B701-3AE0B94A62B3}.Release|Win32.Build.0 = Release|Win32 + {EF6B0287-13FD-45A8-88C2-EB961D9317EB}.Debug|Win32.ActiveCfg = Debug|Win32 + {EF6B0287-13FD-45A8-88C2-EB961D9317EB}.Debug|Win32.Build.0 = Debug|Win32 + {EF6B0287-13FD-45A8-88C2-EB961D9317EB}.Release|Win32.ActiveCfg = Release|Win32 + {EF6B0287-13FD-45A8-88C2-EB961D9317EB}.Release|Win32.Build.0 = Release|Win32 + {E6DA953C-4580-48FA-B9F6-1B3A65F5F4E8}.Debug|Win32.ActiveCfg = Debug|Win32 + {E6DA953C-4580-48FA-B9F6-1B3A65F5F4E8}.Debug|Win32.Build.0 = Debug|Win32 + {E6DA953C-4580-48FA-B9F6-1B3A65F5F4E8}.Release|Win32.ActiveCfg = Release|Win32 + {E6DA953C-4580-48FA-B9F6-1B3A65F5F4E8}.Release|Win32.Build.0 = Release|Win32 + {03B06887-B2C1-440C-A852-94545F540B07}.Debug|Win32.ActiveCfg = Debug|Win32 + {03B06887-B2C1-440C-A852-94545F540B07}.Debug|Win32.Build.0 = Debug|Win32 + {03B06887-B2C1-440C-A852-94545F540B07}.Release|Win32.ActiveCfg = Release|Win32 + {03B06887-B2C1-440C-A852-94545F540B07}.Release|Win32.Build.0 = Release|Win32 + {D547D9A8-3732-44F6-AF9D-9962F7FA8883}.Debug|Win32.ActiveCfg = Debug|Win32 + {D547D9A8-3732-44F6-AF9D-9962F7FA8883}.Debug|Win32.Build.0 = Debug|Win32 + {D547D9A8-3732-44F6-AF9D-9962F7FA8883}.Release|Win32.ActiveCfg = Release|Win32 + {D547D9A8-3732-44F6-AF9D-9962F7FA8883}.Release|Win32.Build.0 = Release|Win32 + {D5E65699-D8A6-4432-AB41-BA3B59D58CF6}.Debug|Win32.ActiveCfg = Debug|Win32 + {D5E65699-D8A6-4432-AB41-BA3B59D58CF6}.Debug|Win32.Build.0 = Debug|Win32 + {D5E65699-D8A6-4432-AB41-BA3B59D58CF6}.Release|Win32.ActiveCfg = Release|Win32 + {D5E65699-D8A6-4432-AB41-BA3B59D58CF6}.Release|Win32.Build.0 = Release|Win32 + {4B8FC566-68F0-47FD-A13F-550D7CF07EF0}.Debug|Win32.ActiveCfg = Debug|Win32 + {4B8FC566-68F0-47FD-A13F-550D7CF07EF0}.Debug|Win32.Build.0 = Debug|Win32 + {4B8FC566-68F0-47FD-A13F-550D7CF07EF0}.Release|Win32.ActiveCfg = Release|Win32 + {4B8FC566-68F0-47FD-A13F-550D7CF07EF0}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter10/Chapter10.suo b/Chapter10/Chapter10.suo new file mode 100644 index 0000000000000000000000000000000000000000..0fdbc655f4cede0be94adc3a4da60fb6415364d7 GIT binary patch literal 24576 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 RC(>+7C!9!g^}8`A{uj#QRMY?f literal 0 HcmV?d00001 diff --git a/Chapter10/ColorDialogEx/AssemblyInfo.cpp b/Chapter10/ColorDialogEx/AssemblyInfo.cpp new file mode 100644 index 0000000..a5817e9 --- /dev/null +++ b/Chapter10/ColorDialogEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ColorDialogEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ColorDialogEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/ColorDialogEx/ColorDialogEx.cpp b/Chapter10/ColorDialogEx/ColorDialogEx.cpp new file mode 100644 index 0000000..3c122ae --- /dev/null +++ b/Chapter10/ColorDialogEx/ColorDialogEx.cpp @@ -0,0 +1,16 @@ +// ColorDialogEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace ColorDialogEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/ColorDialogEx/ColorDialogEx.vcproj b/Chapter10/ColorDialogEx/ColorDialogEx.vcproj new file mode 100644 index 0000000..66eef9c --- /dev/null +++ b/Chapter10/ColorDialogEx/ColorDialogEx.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/ColorDialogEx/Form1.h b/Chapter10/ColorDialogEx/Form1.h new file mode 100644 index 0000000..e7bc208 --- /dev/null +++ b/Chapter10/ColorDialogEx/Form1.h @@ -0,0 +1,66 @@ +#pragma once + + +namespace ColorDialogEx { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Common Color Dialog - Click Form"; + this->Click += + gcnew System::EventHandler(this, &Form1::Form1_Click); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) + { + ColorDialog^ colordialog = gcnew ColorDialog(); + + if (colordialog->ShowDialog() == + System::Windows::Forms::DialogResult::OK) + { + BackColor = colordialog->Color; + } + } + }; +} + diff --git a/Chapter10/ColorDialogEx/Form1.resx b/Chapter10/ColorDialogEx/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter10/ColorDialogEx/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter10/ColorDialogEx/resource.h b/Chapter10/ColorDialogEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/ColorDialogEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/ColorDialogEx/stdafx.cpp b/Chapter10/ColorDialogEx/stdafx.cpp new file mode 100644 index 0000000..98db4b9 --- /dev/null +++ b/Chapter10/ColorDialogEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ColorDialogEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/ColorDialogEx/stdafx.h b/Chapter10/ColorDialogEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/ColorDialogEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/CustomDialog/AssemblyInfo.cpp b/Chapter10/CustomDialog/AssemblyInfo.cpp new file mode 100644 index 0000000..15ffeeb --- /dev/null +++ b/Chapter10/CustomDialog/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("CustomDialog")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("CustomDialog")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/CustomDialog/CustomDialog.cpp b/Chapter10/CustomDialog/CustomDialog.cpp new file mode 100644 index 0000000..f53550d --- /dev/null +++ b/Chapter10/CustomDialog/CustomDialog.cpp @@ -0,0 +1,16 @@ +// CustomDialog.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace CustomDialog; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/CustomDialog/CustomDialog.vcproj b/Chapter10/CustomDialog/CustomDialog.vcproj new file mode 100644 index 0000000..1bae514 --- /dev/null +++ b/Chapter10/CustomDialog/CustomDialog.vcproj @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/CustomDialog/Form1.h b/Chapter10/CustomDialog/Form1.h new file mode 100644 index 0000000..e2b6463 --- /dev/null +++ b/Chapter10/CustomDialog/Form1.h @@ -0,0 +1,93 @@ +#pragma once + +#include "MyDialog.h" + +namespace CustomDialog { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Label^ lbRetString; + System::Windows::Forms::Label^ lbRetVal; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->lbRetString = (gcnew System::Windows::Forms::Label()); + this->lbRetVal = (gcnew System::Windows::Forms::Label()); + this->SuspendLayout(); + // + // lbRetString + // + this->lbRetString->Location = System::Drawing::Point(34, 119); + this->lbRetString->Name = L"lbRetString"; + this->lbRetString->Size = System::Drawing::Size(225, 19); + this->lbRetString->TabIndex = 3; + // + // lbRetVal + // + this->lbRetVal->Location = System::Drawing::Point(34, 77); + this->lbRetVal->Name = L"lbRetVal"; + this->lbRetVal->Size = System::Drawing::Size(225, 19); + this->lbRetVal->TabIndex = 2; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Controls->Add(this->lbRetString); + this->Controls->Add(this->lbRetVal); + this->Name = L"Form1"; + this->Text = L"Click Form to get dialog"; + this->Click += + gcnew System::EventHandler(this, &Form1::Form1_Click); + this->ResumeLayout(false); + } + +#pragma endregion + + private: + System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) + { + MyDialog ^mydialog = gcnew MyDialog(); + mydialog->PassedValue = "This has been passed from Form1"; + + if (mydialog->ShowDialog() == + System::Windows::Forms::DialogResult::OK) + lbRetVal->Text = "OK"; + else if (mydialog->DialogResult == + System::Windows::Forms::DialogResult::Abort) + lbRetVal->Text = "Abort"; + else + lbRetVal->Text = "Cancel"; + + lbRetString->Text = mydialog->PassedValue; + } + }; +} + diff --git a/Chapter10/CustomDialog/Form1.resx b/Chapter10/CustomDialog/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter10/CustomDialog/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter10/CustomDialog/MyDialog.h b/Chapter10/CustomDialog/MyDialog.h new file mode 100644 index 0000000..1019356 --- /dev/null +++ b/Chapter10/CustomDialog/MyDialog.h @@ -0,0 +1,110 @@ +#pragma once + +using namespace System; +using namespace System::ComponentModel; +using namespace System::Collections; +using namespace System::Windows::Forms; +using namespace System::Data; +using namespace System::Drawing; + + +namespace CustomDialog { + + public ref class MyDialog : public System::Windows::Forms::Form + { + public: + MyDialog(void) + { + InitializeComponent(); + } + + protected: + ~MyDialog() + { + if (components) + { + delete components; + } + } + + public: + property String^ PassedValue // PassedValue property + { + void set(String ^value) + { + tbPassedValue->Text = value; + } + String ^get() + { + return tbPassedValue->Text; + } + } + + private: + System::Windows::Forms::Button^ bnCancel; + System::Windows::Forms::Button^ bnAbort; + System::Windows::Forms::Button^ bnOK; + System::Windows::Forms::TextBox^ tbPassedValue; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->bnCancel = (gcnew System::Windows::Forms::Button()); + this->bnAbort = (gcnew System::Windows::Forms::Button()); + this->bnOK = (gcnew System::Windows::Forms::Button()); + this->tbPassedValue = (gcnew System::Windows::Forms::TextBox()); + this->SuspendLayout(); + // + // bnCancel + // + this->bnCancel->DialogResult = System::Windows::Forms::DialogResult::Cancel; + this->bnCancel->Location = System::Drawing::Point(205, 60); + this->bnCancel->Name = L"bnCancel"; + this->bnCancel->Size = System::Drawing::Size(75, 23); + this->bnCancel->TabIndex = 7; + this->bnCancel->Text = L"Cancel"; + // + // bnAbort + // + this->bnAbort->DialogResult = System::Windows::Forms::DialogResult::Abort; + this->bnAbort->Location = System::Drawing::Point(110, 60); + this->bnAbort->Name = L"bnAbort"; + this->bnAbort->Size = System::Drawing::Size(75, 23); + this->bnAbort->TabIndex = 6; + this->bnAbort->Text = L"Abort"; + // + // bnOK + // + this->bnOK->DialogResult = System::Windows::Forms::DialogResult::OK; + this->bnOK->Location = System::Drawing::Point(13, 60); + this->bnOK->Name = L"bnOK"; + this->bnOK->Size = System::Drawing::Size(75, 23); + this->bnOK->TabIndex = 5; + this->bnOK->Text = L"OK"; + // + // tbPassedValue + // + this->tbPassedValue->Location = System::Drawing::Point(13, 20); + this->tbPassedValue->Name = L"tbPassedValue"; + this->tbPassedValue->Size = System::Drawing::Size(267, 20); + this->tbPassedValue->TabIndex = 4; + // + // myDialog + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 102); + this->Controls->Add(this->bnCancel); + this->Controls->Add(this->bnAbort); + this->Controls->Add(this->bnOK); + this->Controls->Add(this->tbPassedValue); + this->Name = L"myDialog"; + this->Text = L"My Custom Dialog"; + this->ResumeLayout(false); + this->PerformLayout(); + } +#pragma endregion + }; +} diff --git a/Chapter10/CustomDialog/myDialog.cpp b/Chapter10/CustomDialog/myDialog.cpp new file mode 100644 index 0000000..5898a78 --- /dev/null +++ b/Chapter10/CustomDialog/myDialog.cpp @@ -0,0 +1,3 @@ +#include "StdAfx.h" +#include "myDialog.h" + diff --git a/Chapter10/CustomDialog/resource.h b/Chapter10/CustomDialog/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/CustomDialog/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/CustomDialog/stdafx.cpp b/Chapter10/CustomDialog/stdafx.cpp new file mode 100644 index 0000000..cb51d3d --- /dev/null +++ b/Chapter10/CustomDialog/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// CustomDialog.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/CustomDialog/stdafx.h b/Chapter10/CustomDialog/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/CustomDialog/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/ErrorProviderEx/AssemblyInfo.cpp b/Chapter10/ErrorProviderEx/AssemblyInfo.cpp new file mode 100644 index 0000000..aa1a7a2 --- /dev/null +++ b/Chapter10/ErrorProviderEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ErrorProviderEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ErrorProviderEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/ErrorProviderEx/ErrorProviderEx.cpp b/Chapter10/ErrorProviderEx/ErrorProviderEx.cpp new file mode 100644 index 0000000..3962350 --- /dev/null +++ b/Chapter10/ErrorProviderEx/ErrorProviderEx.cpp @@ -0,0 +1,16 @@ +// ErrorProviderEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace ErrorProviderEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/ErrorProviderEx/ErrorProviderEx.vcproj b/Chapter10/ErrorProviderEx/ErrorProviderEx.vcproj new file mode 100644 index 0000000..e351df6 --- /dev/null +++ b/Chapter10/ErrorProviderEx/ErrorProviderEx.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/ErrorProviderEx/Form1.h b/Chapter10/ErrorProviderEx/Form1.h new file mode 100644 index 0000000..b41e613 --- /dev/null +++ b/Chapter10/ErrorProviderEx/Form1.h @@ -0,0 +1,165 @@ +#pragma once + + +namespace ErrorProviderEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::TextBox^ tbPword; + System::Windows::Forms::Label^ lbPword; + System::Windows::Forms::Button^ bnLogin; + System::Windows::Forms::TextBox^ tbName; + System::Windows::Forms::Label^ lbName; + System::Windows::Forms::ErrorProvider^ eProvider; + System::ComponentModel::IContainer^ components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->components = (gcnew System::ComponentModel::Container()); + this->tbPword = (gcnew System::Windows::Forms::TextBox()); + this->lbPword = (gcnew System::Windows::Forms::Label()); + this->bnLogin = (gcnew System::Windows::Forms::Button()); + this->tbName = (gcnew System::Windows::Forms::TextBox()); + this->lbName = (gcnew System::Windows::Forms::Label()); + this->eProvider = + (gcnew System::Windows::Forms::ErrorProvider(this->components)); + (cli::safe_cast + (this->eProvider))->BeginInit(); + this->SuspendLayout(); + // + // tbPword + // + this->tbPword->Location = System::Drawing::Point(103, 83); + this->tbPword->Name = L"tbPword"; + this->tbPword->PasswordChar = '*'; + this->tbPword->Size = System::Drawing::Size(100, 20); + this->tbPword->TabIndex = 9; + this->tbPword->Validating += + gcnew System::ComponentModel::CancelEventHandler(this, + &Form1::textbox_Validating); + // + // lbPword + // + this->lbPword->AutoSize = true; + this->lbPword->Location = System::Drawing::Point(34, 83); + this->lbPword->Name = L"lbPword"; + this->lbPword->Size = System::Drawing::Size(53, 13); + this->lbPword->TabIndex = 8; + this->lbPword->Text = L"&Password"; + // + // bnLogin + // + this->bnLogin->Location = System::Drawing::Point(75, 131); + this->bnLogin->Name = L"bnLogin"; + this->bnLogin->Size = System::Drawing::Size(75, 23); + this->bnLogin->TabIndex = 7; + this->bnLogin->Text = L"&Login"; + this->bnLogin->Click += + gcnew System::EventHandler(this, &Form1::login_Click); + // + // tbName + // + this->tbName->Location = System::Drawing::Point(103, 31); + this->tbName->Name = L"tbName"; + this->tbName->Size = System::Drawing::Size(100, 20); + this->tbName->TabIndex = 6; + this->tbName->Validating += + gcnew System::ComponentModel::CancelEventHandler(this, + &Form1::textbox_Validating); + // + // lbName + // + this->lbName->AutoSize = true; + this->lbName->Location = System::Drawing::Point(34, 31); + this->lbName->Name = L"lbName"; + this->lbName->Size = System::Drawing::Size(35, 13); + this->lbName->TabIndex = 5; + this->lbName->Text = L"&Name"; + // + // eProvider + // + this->eProvider->ContainerControl = this; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(237, 185); + this->Controls->Add(this->tbPword); + this->Controls->Add(this->lbPword); + this->Controls->Add(this->bnLogin); + this->Controls->Add(this->tbName); + this->Controls->Add(this->lbName); + this->Name = L"Form1"; + this->Text = L"System Login"; + (cli::safe_cast + (this->eProvider))->EndInit(); + this->ResumeLayout(false); + this->PerformLayout(); + + } +#pragma endregion + + private: + System::Void textbox_Validating(System::Object^ sender, + System::ComponentModel::CancelEventArgs^ e) + { + try + { + TextBox ^tb = (TextBox^)(sender); + + if (tb->Text->Equals("")) + eProvider->SetError(tb, "**Error** Missing Entry!"); + else + eProvider->SetError(tb, ""); + } + catch (Exception^) + { + // Not TextBox + } + } + + System::Void login_Click(System::Object^ sender, System::EventArgs^ e) + { + if (tbName->Text->Equals("")) + eProvider->SetError(tbName, "**Error** Missing Entry!"); + else + eProvider->SetError(tbName, ""); + + if (tbPword->Text->Equals("")) + { + // Place the icon left side of control + eProvider->SetIconAlignment(tbPword, + ErrorIconAlignment::MiddleLeft); + eProvider->SetError(tbPword, "**Error** Missing Entry!"); + } + else + eProvider->SetError(tbPword, ""); + } + }; +} + diff --git a/Chapter10/ErrorProviderEx/Form1.resx b/Chapter10/ErrorProviderEx/Form1.resx new file mode 100644 index 0000000..119b9f3 --- /dev/null +++ b/Chapter10/ErrorProviderEx/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter10/ErrorProviderEx/resource.h b/Chapter10/ErrorProviderEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/ErrorProviderEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/ErrorProviderEx/stdafx.cpp b/Chapter10/ErrorProviderEx/stdafx.cpp new file mode 100644 index 0000000..27d7bb8 --- /dev/null +++ b/Chapter10/ErrorProviderEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ErrorProviderEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/ErrorProviderEx/stdafx.h b/Chapter10/ErrorProviderEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/ErrorProviderEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/ListViewEx/AssemblyInfo.cpp b/Chapter10/ListViewEx/AssemblyInfo.cpp new file mode 100644 index 0000000..ef78c7d --- /dev/null +++ b/Chapter10/ListViewEx/AssemblyInfo.cpp @@ -0,0 +1,63 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ListViewEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ListViewEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright © 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft CLR Framework documentation for more information on assembly signing. +// +// You can use the attributes below to control which key is used for signing. +// You can also use the project property page for signing under Common Properties +// to set the same information. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft CLR Framework +// documentation for more information on this. +// +//[assembly:AssemblyDelaySignAttribute(false)]; +//[assembly:AssemblyKeyFileAttribute("")]; +//[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/ListViewEx/Form1.h b/Chapter10/ListViewEx/Form1.h new file mode 100644 index 0000000..77d2069 --- /dev/null +++ b/Chapter10/ListViewEx/Form1.h @@ -0,0 +1,265 @@ +#pragma once + +namespace ListViewEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + FillListView(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::ImageList^ imFruitSmall; + System::Windows::Forms::ImageList^ ilFruitLarge; + System::Windows::Forms::RadioButton^ rbDetails; + System::Windows::Forms::RadioButton^ rbList; + System::Windows::Forms::RadioButton^ rbSmallIcon; + System::Windows::Forms::RadioButton^ rbLargeIcon; + System::Windows::Forms::Label^ label; + System::Windows::Forms::ListView^ lView; + System::Windows::Forms::ColumnHeader^ Fruit; + System::Windows::Forms::ColumnHeader^ Price; + System::Windows::Forms::ColumnHeader^ Available; + System::ComponentModel::IContainer^ components; + +#pragma region Windows Form Designer generated code + ///

+ /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + void InitializeComponent(void) + { + this->components = (gcnew System::ComponentModel::Container()); + System::ComponentModel::ComponentResourceManager^ resources = + (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); + this->imFruitSmall = + (gcnew System::Windows::Forms::ImageList(this->components)); + this->ilFruitLarge = + (gcnew System::Windows::Forms::ImageList(this->components)); + this->rbDetails = (gcnew System::Windows::Forms::RadioButton()); + this->rbList = (gcnew System::Windows::Forms::RadioButton()); + this->rbSmallIcon = (gcnew System::Windows::Forms::RadioButton()); + this->rbLargeIcon = (gcnew System::Windows::Forms::RadioButton()); + this->label = (gcnew System::Windows::Forms::Label()); + this->lView = (gcnew System::Windows::Forms::ListView()); + this->Fruit = (gcnew System::Windows::Forms::ColumnHeader()); + this->Price = (gcnew System::Windows::Forms::ColumnHeader()); + this->Available = (gcnew System::Windows::Forms::ColumnHeader()); + this->SuspendLayout(); + // + // imFruitSmall + // + this->imFruitSmall->ImageStream = + (cli::safe_cast + (resources->GetObject(L"imFruitSmall.ImageStream"))); + this->imFruitSmall->Images->SetKeyName(0, L"apple.ico"); + this->imFruitSmall->Images->SetKeyName(1, L"banana.ico"); + this->imFruitSmall->Images->SetKeyName(2, L"orange.ico"); + // + // ilFruitLarge + // + this->ilFruitLarge->ImageStream = + (cli::safe_cast + (resources->GetObject(L"ilFruitLarge.ImageStream"))); + this->ilFruitLarge->Images->SetKeyName(0, L"apple.ico"); + this->ilFruitLarge->Images->SetKeyName(1, L"banana.ico"); + this->ilFruitLarge->Images->SetKeyName(2, L"orange.ico"); + // + // rbDetails + // + this->rbDetails->Anchor = + static_cast + ((System::Windows::Forms::AnchorStyles::Bottom | + System::Windows::Forms::AnchorStyles::Right)); + this->rbDetails->AutoSize = true; + this->rbDetails->Checked = true; + this->rbDetails->Location = System::Drawing::Point(154, 201); + this->rbDetails->Name = L"rbDetails"; + this->rbDetails->Size = System::Drawing::Size(53, 17); + this->rbDetails->TabIndex = 17; + this->rbDetails->Text = L"Details"; + this->rbDetails->CheckedChanged += + gcnew System::EventHandler(this, &Form1::rbType_CheckedChanged); + // + // rbList + // + this->rbList->Anchor = + static_cast + ((System::Windows::Forms::AnchorStyles::Bottom | + System::Windows::Forms::AnchorStyles::Right)); + this->rbList->AutoSize = true; + this->rbList->Location = System::Drawing::Point(154, 177); + this->rbList->Name = L"rbList"; + this->rbList->Size = System::Drawing::Size(37, 17); + this->rbList->TabIndex = 16; + this->rbList->Text = L"List"; + this->rbList->CheckedChanged += + gcnew System::EventHandler(this, &Form1::rbType_CheckedChanged); + // + // rbSmallIcon + // + this->rbSmallIcon->Anchor = + static_cast + ((System::Windows::Forms::AnchorStyles::Bottom | + System::Windows::Forms::AnchorStyles::Right)); + this->rbSmallIcon->AutoSize = true; + this->rbSmallIcon->Location = System::Drawing::Point(154, 153); + this->rbSmallIcon->Name = L"rbSmallIcon"; + this->rbSmallIcon->Size = System::Drawing::Size(70, 17); + this->rbSmallIcon->TabIndex = 15; + this->rbSmallIcon->Text = L"Small Icon"; + this->rbSmallIcon->CheckedChanged += + gcnew System::EventHandler(this, &Form1::rbType_CheckedChanged); + // + // rbLargeIcon + // + this->rbLargeIcon->Anchor = + static_cast + ((System::Windows::Forms::AnchorStyles::Bottom | + System::Windows::Forms::AnchorStyles::Right)); + this->rbLargeIcon->AutoSize = true; + this->rbLargeIcon->Location = System::Drawing::Point(154, 129); + this->rbLargeIcon->Name = L"rbLargeIcon"; + this->rbLargeIcon->Size = System::Drawing::Size(72, 17); + this->rbLargeIcon->TabIndex = 14; + this->rbLargeIcon->Text = L"Large Icon"; + this->rbLargeIcon->CheckedChanged += + gcnew System::EventHandler(this, &Form1::rbType_CheckedChanged); + // + // label + // + this->label->Anchor = + static_cast + ((System::Windows::Forms::AnchorStyles::Bottom | + System::Windows::Forms::AnchorStyles::Left)); + this->label->BorderStyle = + System::Windows::Forms::BorderStyle::FixedSingle; + this->label->Location = System::Drawing::Point(19, 162); + this->label->Name = L"label"; + this->label->Size = System::Drawing::Size(64, 21); + this->label->TabIndex = 13; + this->label->TextAlign = + System::Drawing::ContentAlignment::MiddleCenter; + // + // lView + // + this->lView->Anchor = + static_cast + ((((System::Windows::Forms::AnchorStyles::Top | + System::Windows::Forms::AnchorStyles::Bottom) | + System::Windows::Forms::AnchorStyles::Left) | + System::Windows::Forms::AnchorStyles::Right)); + this->lView->Columns->AddRange( + gcnew cli::array< System::Windows::Forms::ColumnHeader^>(3) + { + this->Fruit, this->Price, this->Available + }); + this->lView->FullRowSelect = true; + this->lView->GridLines = true; + this->lView->LabelEdit = true; + this->lView->LargeImageList = this->ilFruitLarge; + this->lView->Location = System::Drawing::Point(0, 0); + this->lView->MultiSelect = false; + this->lView->Name = L"lView"; + this->lView->Size = System::Drawing::Size(270, 109); + this->lView->SmallImageList = this->imFruitSmall; + this->lView->TabIndex = 12; + this->lView->View = System::Windows::Forms::View::Details; + this->lView->SelectedIndexChanged += + gcnew System::EventHandler(this, + &Form1::lView_SelectedIndexChanged); + // + // Fruit + // + this->Fruit->Text = L"Fruit"; + this->Fruit->Width = 115; + // + // Price + // + this->Price->Text = L"Price"; + this->Price->Width = 50; + // + // Available + // + this->Available->Text = L"Available"; + this->Available->Width = 100; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(269, 229); + this->Controls->Add(this->rbDetails); + this->Controls->Add(this->rbList); + this->Controls->Add(this->rbSmallIcon); + this->Controls->Add(this->rbLargeIcon); + this->Controls->Add(this->label); + this->Controls->Add(this->lView); + this->Name = L"Form1"; + this->Text = L"List View Example"; + this->ResumeLayout(false); + this->PerformLayout(); + } +#pragma endregion + + private: + void FillListView() + { + array^ itemRec1 = gcnew array { + "Apple", "1.50", "September" + }; + lView->Items->Add(gcnew ListViewItem(itemRec1, 0)); + + array^ itemRec2 = gcnew array { + "Banana", "3.95", "November" + }; + lView->Items->Add(gcnew ListViewItem(itemRec2, 1)); + + array^ itemRec3 = gcnew array { + "Orange", "2.50", "March" + }; + lView->Items->Add(gcnew ListViewItem(itemRec3, 2)); + } + + System::Void lView_SelectedIndexChanged(System::Object^ sender, + System::EventArgs^ e) + { + if (lView->FocusedItem != nullptr) + label->Text = lView->FocusedItem->SubItems[1]->Text; + } + + System::Void rbType_CheckedChanged(System::Object^ sender, + System::EventArgs^ e) + { + if (rbLargeIcon->Checked) + lView->View = View::LargeIcon; + else if (rbSmallIcon->Checked) + lView->View = View::SmallIcon; + else if (rbList->Checked) + lView->View = View::List; + else if (rbDetails->Checked) + lView->View = View::Details; + } + }; +} + + diff --git a/Chapter10/ListViewEx/Form1.resx b/Chapter10/ListViewEx/Form1.resx new file mode 100644 index 0000000..6ab62a7 --- /dev/null +++ b/Chapter10/ListViewEx/Form1.resx @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC8 + CQAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAUEPAAH7DwABUx8A + AUEFAAEOBAsFAAH7ASIB+w0AAVMfAAFBAwABDgELAQEEHwEBAQsDAAH7ATAB+wE4DAABUwQAAQsBAQIk + ASMBCxUAAUECAAEOAR4BHwEgAR8EIAEfAR4CAAP7ATgBIgsAAVMDAAEkASwFJQEkAQsTAAFBAgABHgEf + AiAF+QEgAR8BCwEAAfsBNwH7AjgLAAFTAgABJQUsASUDJAELEgABQQEAAQsBAQEfASAB+QFBAUcC+QFB + AfkBIAEBAQAB+wEOAvsBOAEqCgABUwEAAQsBLAEyBCwBKwQkEgABQQEAAQsBHwEgA0cB4wJHA/kBIAEA + AfsBAAH7AVgCOAoAAVMBAAErATICUwEsAU0CLAElAyQSAAFBAQABHgEgAfkBQQFHARYBtwHjAWoBRwFB + AfkBIAELAfsBAAEpAV4B+wE4ATIJAAFTAQABKwEyAVMBegFNAVMBMgEsASUDJAELEQABQQEAAQEBIAL5 + AUcBFwEWARcCRwJBASABCwH7AgAB+wFeAfsBMgEiCAABUwEAASsBMgJ6A1MBLAQlAQsRAAFBAQABHgIg + AvkBIAFHAfkDQQH5ASABAAH7AgABIgFeAeUBOAErAQ4GAAELAVMBAAEjATIBUwGaA1MBTQQlEgABQQEA + AR4BAQEfAQEBHgEBASQBHgEBAyABAQEAAfsDAAH7AaAB5QE4ASUBIwQAAfsBAAFTAgABUwEyAZoCUwIs + AyUBJBIAAUECAAELAh4BAQEgASMBHwMeAQsCAAH7BAAB+wHDAaAC+wI3AvsCAAFTAgABIwNTAiwBJgIl + ASQTAAFBBgABCwEjAgsFAAH7BAABDgH7AcMB9gGgAl4B+wExAgABUwMAAQsBJQFNAkYBJQEkAR4UAAFB + BgABJAFLBwAB+wYAAvsBoALDAV4BKQIAAVMfAAFBDwAB+wgAASkCNwEOAwABUx8AEEEQ+xBTEAABQgFN + AT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/4EACw== + + + + 237, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABm + DwAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABgAMAASADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAIEEg+yBTIAABQR4A + AUEB+x4AAfsBUx4AAVMgAAFBDgAEDgwAAUEB+wIAASIBAxoAAfsBUx4AAVMgAAFBCwABDgkLCQABQQH7 + AQABIgL7AQMZAAH7AVMeAAFTIAABQQkAAQ4CCwIeBQECHgILBwABQQH7AQABKQH7AjgBIhgAAfsBUx4A + AVMgAAFBBwABDgILAR4CAQgfAQEBHgELBgABQQH7AQABMAL7AjgBDhcAAfsBUwgAAgsBHgIBBCQBIwIL + CgABUyAAAUEGAAEOAQsBHgIBAx8IIAEfAQEBHgEOBAABQQH7AQABNwL7AjgBKhcAAfsBUwcAAQsBAQEk + CCUCJAEBAQsIAAFTIAABQQUAAQ4BCwEeAQECHwIgAR8JIAIfAR4EAAFBAfsBAAP7AzgBIhYAAfsBUwYA + AR4BJAElASwBKwklAiQBHgELBgABUyAAAUEFAAELAR4BAQIfBCAH+QQgAR8BCwMAAUEB+wEAATcD+wI4 + ATEWAAH7AVMFAAEeASUELAErAiUBKwMlBSQBAQELBQABUyAAAUEEAAELAR4BAQIfAyAK+QMgAR8BAQEL + AgABQQH7AQABNwP7AzgBKhUAAfsBUwQAAQsBJQosAiUGJAEBAQsEAAFTIAABQQQAAQsBHgIfAyAD+QFB + BfkBIAP5AiABHwEeAgABQQH7AQABKQL7ATcB+wM4AQ4UAAH7AVMEAAEkCywBKwIlBiQBAQQAAVMgAAFB + AwABCwEeAQECHwIgA/kBQQNHBPkBQQP5AiABAQELAQABQQH7AQABDgT7AzgBKhQAAfsBUwMAAQsDLAEy + CSwBKwElByQBCwMAAVMgAAFBAwABCwEeAQEBHwIgA/kBQQRHBUED+QIgAR8BCwEAAUEB+wIAATcB+wFe + ATcEOAEiEwAB+wFTAwABJAUyAVMILAIlBiQBCwMAAVMgAAFBAwABCwEeAR8DIAFHAUEDRwEXAeMBFwNH + AUEF+QIgAR4BAAFBAfsCAAEiAvsBWAE3AzgBMRMAAfsBUwMAASsDMgRTAiwBTQFTAywCJQYkAQEDAAFT + IAABQQIAAQ4BCwEBAR8CIAH5AUEBRwMXARYBlAEWARcBagRHA/kCIAEBAQ4BQQH7AwABOAH7AV4BOAH7 + AzgBIhIAAfsBUwIAAQsBKwMyAlMBdQFTAiwBTQFTATICLAErASUGJAEBAwABUyAAAUECAAELAR4BAQIg + AvkBQQJHAeMBFgGUAbcBlAHjAmoCRwJBA/kBIAEBAQsBQQH7AwABKQH7Al4B+wM4ATISAAH7AVMDAAEr + AzIBUwJ6AVMBTQEsAlMBMgMsAiUGJAELAgABUyAAAUECAAELAR4BHwIgA/kCRwEXAeMBlAG9AZQBFgJq + AkcDQQL5ASABAQELAUEB+wQAATcB+wJeAfsCOAEyASoRAAH7AVMDAAErAzIBdQJ6AlMBTQNTAywDJQUk + AQsCAAFTIAABQQIAAQsBAQEfAiAD+QFBAkcBFwHjARYB4wEXBEcEQQH5ASABHwELAUEB+wQAASkB+wNe + AfsBOAIyASIQAAH7AVMDAAErAzIBegGaAXoBdQVTAywHJQEkAQsCAAFTIAABQQIAAQsBAQEfAiAE+QFB + AkcBFwdHAUECRwFBAfkBIAEfAQsBQQH7BQABNwH7AuUBXgH7AjIBKwELDwAB+wFTAwABJAMyAXUCmgF6 + BVMDLAclASQDAAFTIAABQQIAAQsBHgEfAyAE+QIgAkcBIAL5BUED+QEgAQEBAAFBAfsFAAEiAfsBXgLl + AV4BOAEyAisBDgwAASMBCwH7AVMDAAEjAzIBUwOaBVMCTQEsByUBAQMAAVMgAAFBAgABCwEeAQEBHwUg + Bh8DIAP5AUcBQQH5AiABCwEAAUEB+wYAATcB+wHlAaAB5QFeATgBMQIrAQsKAAEpATEBHgH7AVMEAAEr + AjIBUwF6ApoFUwJNASwHJQELAwABUyAAAUEDAAEeAgEDHwIBAR4DAQEkAQEBHgIBAR8GIAEBAQ4BAAFB + AfsGAAEOAvsCoAHlAV4BOAExAiUBIwEOBwABMAH7ASIBAAH7AVMEAAEjAVMCMgFTApoEUwQsBiUBJAQA + AVMgAAFBAwABDggeAQEBHwEkASMBAQEeAgsCHgIBAh8BAQELAgABQQH7BwABKQH7AV4BoAHDAeUBXgE4 + ATcCKwEkASMDCwIiATAB+wEiAgAB+wFTBAABCwFMAVMCMgFTAXoDUwEyAywGJQEkBQABUyAAAUEFAAIL + BB4BAQEfASABRQEjAh8HHgILAwABQQH7CAABMAH7AeUCwwGgAV4D+wE4AzcBOAP7ASMDAAH7AVMFAAEj + AUwBUwEyAVMBdQFTAU0ELAEmBSUBJAYAAVMgAAFBBwADCwEeAwEBJAEjAR4CAQIeAwsGAAFBAfsJAAE3 + AfsB5QPDAaACXgf7ATEEAAH7AVMGAAEeASUBTQEsAlMBTQFGAUUBKwEsBSUBJAcAAVMgAAFBDAACCwEk + ASMECwoAAUEB+wkAAQ4BNwH7AeUBwwL2AcMBoAHlBF4B+wIxAQ4DAAH7AVMHAAELASMBJQJNASUBRgFE + AUYBTQIlAiQBHggAAVMgAAFBDQABIwEkAUsBIg0AAUEB+woAAQ4BNwL7AeUEwwGgAsMBoAFeAjcBDgMA + AfsBUwoAAR4GJAEeAQsLAAFTIAABQQwAAUQBJAFFAUsBRA0AAUEB+wwAASkD+wFeAaAEwwHlAV4B+wEp + BAAB+wFTHgABUyAAAUEMAAFLAUUBAAEMDgABQQH7DQABDgEDATcCXgHlBF4B+wEDBQAB+wFTHgABUyAA + AUEeAAFBAfsQAAEiASkBMAM3ASkBDgYAAfsBUx4AAVMgAAFBHgABQQH7HgAB+wFTHgABUyAAIEEg+yBT + IAABQgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEGAAECFgAD//8A/wADAAs= + + + \ No newline at end of file diff --git a/Chapter10/ListViewEx/Images/apple.ico b/Chapter10/ListViewEx/Images/apple.ico new file mode 100644 index 0000000000000000000000000000000000000000..a7cf2f9608ef56fa9376b821abaf09b0a370a8e5 GIT binary patch literal 2238 zcmc&!d0doL6g}T;%mOpO3_G&#n<&DlEGo+|$RY^>Du#-f1dNCaf;*;?mfAw4rDa-K zS!s)9dunB+?fYhBYObjzm71^fF|PmUpS}6L?|bi_d(S=Z-uDe4@fQ*TKDF4W1-t>o zaMFaqoU&aW^Hn`B=Ri238+RR$Vb52D3BZ} zU`r4%U_YR#gaUg3-6$qmL*I3r^4J137%xpjtRMMY%K?2lg5)(eaorBRT0pNj21z=A zr~pBY`=FP8fSGoGFWIjRP?TU~v4BqEUOyRO)BxoQND2e-r7$YaLelv$?hKNmh#3>0 zQJf+kkE9@(V>>kXg&L0n<^+T?zgE-D^JLS<8&c+6=GaQkaWL!YFGW)KckuU=^=zZI zUgUTkIxt2(h3k)C@sRVBaNUIf*29l+p4#&;Y6UX;64P4f>tIdjqw1pHLh7d`a!9D- z{xNDPLy*jaJ+Ls&jqxzsU{um(7)MQ+%rTbu6Xdyx?^WciWxZE$y^{SYpf)va)UTXL z-LG)YVeZ9z-$S1Uz!Zjb_Q1y==h=k-<_o4?UpcSpQQAI*3I`d}K@MtC*VDcUZaBdj z?1F#c3anWo@W{Oa=}7`c@)&Rq2KJ&NL%>3==?wx(?8cx}fnuwGS~^5t2NKyQEe;{n zEHJM{&bJP33KN#i66ozO5Fbpg0qyWm9)V6D4nsf(YRUv+D_5b+M*g7!L!=Dq*g<_= z*t${Rwao$^=}Tb51BhmCJ@c0!Ab%M=3p(-eO6t5*<~`1HbTaoI0e8%VKWzS?HAK;2o6(18W{oG#7oxt>sxx!bc}qmu@uI3(RPwcJ&tKyqo7@ z{|&8x%QTEH5?H@lu4_N`DUE$u3k>N%T?N075P>k?BS^_xgqRfO;{CAl%zb!fYanac zM_^73V~q`%G=??f{c!D9jS%7;lLT_p^7|NR1S&P=| z4a+r0YwK08qdYmeJn;(CRd{lWe^YUBag#dblFJo%veaZ6J+!&G*(Yv7#lQ<3m+*3_ z_{Uz)SAH_5dd`AXl~d!IoD>)Fa`nUy8q9%#c5Pc*o7V2-S>;hKQ(VB4)f1abss~%E z3*Ftra&ui4O$pq1v&`Vc9g-=kGSFJ6*gqg+$Eb{cckOqv?rMytgA-5jd%tmkt+0Ra zvfB>FdIt^H9G|DCSvWbx;lv&45t}@x6ov=CHnTJ$`|G8LU9w{bDC}lkq7$FtS5<#g zTUc=Ku{W-HDs=fD<6=u=y$8JDbvCEFhyUY=f1A%J?$PXwzx9q^zt>0V^Jdr97UXI@ zGaWLXsE#}8RoMTRS>JB`=ij}L^!+?7ez{@n@R2TFxV_1S%$k1zS*#Z$@$^zDY&Q8n{ZW&GogX?8_H zgu%D$&v!q3;@N$_-LCwut9^Eaw;~}&#?{Sct9$RUGxcfPVpgc$iMi8F`OU$5<8K`9 zUf+ZJ`BHW1FUgnVr4gR?xgk47-tu5>_!rL^BMf=^ zyu8RFO&>*bkNz2x5*FIpYP7aT%|pr0m=AMbawPf}ya>YW#yzky*4#9KR?Uiph+G*xN|8#e?GDPjmtZ(uEyW`^qH4mx(2@e%hiv{$u5tp U<1gDUuC9+?=lkX#!v8w{17(L4wg3PC literal 0 HcmV?d00001 diff --git a/Chapter10/ListViewEx/Images/banana.ico b/Chapter10/ListViewEx/Images/banana.ico new file mode 100644 index 0000000000000000000000000000000000000000..b6a5a40038b636d461d2f43a125332d5037e0844 GIT binary patch literal 2238 zcmc&#d0bRg6#iymcnmx?9R&qNCDD?Uaw*ira7%MTQ7m%F%#=*cGPM%SN+C0stkkeH zNh>vXLK7r4l#E3SLP14fG-Vq=hJl%Reh)}RK>zH`?|b*%^L^*sbI-Z=H-LgaFE8*d zV5b1I0?>t^2?2y`m!AlA?NIkp)PHA4fEWOzp95TUfUhqwF%(!F0krj~6KUN5J1x+@ zBVg|UNc2&vfD;@o7T}14WZ70)0ku5l5-Kj1Btgabc|sxEPZ6<19C4h`Fm6sE6s0Bz zDMp~z7U--J=E&L$Rs>g7W4~mDXSD?jjApKvkExX=V6z#1h1I~!F!ZJ#iNus?Kv){O z(RVZvTw#Q*#R|I{HO$uvEQ;o`)alEavlVW#U+3^?>(Wpey@h-+%szHnm<_zwj7jsz}BP>v4<;w2O?7lcfL;!qrW?gBOjovO|7 z%+bTExEvjBlt5`V^V^6uat)4GLJ^gLEIA(&>)_uX7!d?bNfr7r)^x%qy#h$fhC2HS zl<^7BT;yJIB&=f3d`ifzJOFGYQc|#ldUeKCAhQT|%-1fDHH}FG_DSrO1>FoaP~J2^ zxK;$*ti*ik70a@DE(QV1x#t}w45zKVeCAfK#X;`#Am_2f;7ZzdGtbge1agiu#K|Ne zm16?e$k!u5whumxy%vt~?7_4YU~4AE$o55-fSrX9ip|h+ze?t(OihDQ=2kHuof~`% z?7_k)p0hbX3G35+G}6hBB)o`DgdhD?8#VwQVO%2@m=K3O^7-2qgQMiJi7@cK$Tign zJR9V6ysZi)dX`nP*RuiVp;$?N1@+^IAb$7ZC=zxA1_ZLV!+^fIR(JDAdUv$ zn3Z=%f?n3iu@7?$35BmbFD?TdoPa||cn2hGr%im=BRudCMM0RQ(Kf3guYP*=*$44u zV!!a><^=SAU3~tR6-%2DkXMQ?qqYClrUm2=ilVOF;UAjikBDMU>m|o8Hz}aMMVwZ% z$ffQ4=6I9XV(mO9mkL!=0{YuJi(-q;9)3fb;T>a*J-_yH@^l*8gn<4+k+b)*nH#Fw zebvMsWnMdG#+NZE0Ul28G!7v1!k=v-27RjYbUD$uPqn=HrB}v%FbrD{lr#!Z%M0(F z&KvpB$+o`PsrL)&ctpRhb3x&J9I2aY0{4L8-Z_c587zkkQb8Ue!uzIURT$BA-B4`xqO5{ zJ`i`~bMiv>s5ULDuN`%Fz4*vE(T0|WydccxMrPkMi# Wz05Z9uQT5Be%S36>;B;XzxQnienqqZ literal 0 HcmV?d00001 diff --git a/Chapter10/ListViewEx/Images/orange.ico b/Chapter10/ListViewEx/Images/orange.ico new file mode 100644 index 0000000000000000000000000000000000000000..39e0e716cfd9fd5f25bf122c3141811a89d14bdf GIT binary patch literal 2238 zcmc&#XHZmE7(M&m?qeIUEU*Y7ELC6;5EM~F0jVN_x)2MZVnJOI79w^nYQ~-R)LzWOp9^<-k6bVf)^CU387?l>%#9N?~u0WW41J1*rf*EJPz&$J|%}xlN zis4qo!m5Oab}NUb1w3L_)e+7;*p25vwLJp64l5y>Wq^QjfQycUtosvKkLBP#xCW)C z>OpyKhE<^f5#=0&?WCm&31^ zg$vQ(KZAvH=RKhOHi1cd1m$!CWTQyzJ}<$vJqA_M9mvyPz@d0MWY| zpyUw6UjS`48IpEYpj-*3)nU?L5xj{uk0K6Ev5O(O(A-% z=h1az9fU56p&I=fP5M5BgKihB;)p)Y7PMH%Lg-Np+N%^6f%708&OnD8nH{Wn9DdKbd9=a9^*1!a{5TC)OjW34)!fKAX+h@(!! zBIz{3D~Mis211H?I8A*6QThX@NWYqO7zbtWddxV%Lr!W*6%bE&?T0Yx0wUIPK+Gk0 zrtF8ZkcY5;J(xix*K8i*pi0QYR>QW4N5_atAxYQ z11!YtNKN+f2&v#O<^T_ygk7+SKMb#h2KbS+73Vl8QmbI;Q357x8)WL4u=JS&%iLOo zmDNK|YC;n&uEivN)LBrm=h1XLi>8x^w&%uqE*!LAc7awLqxoTfK5=8JcCTnk{)b_FmMM1ec!^8+#8|e zM1;<%M=Rn%WlAYj zM!s&AQrbl}#(Too7Yf3!In9XiP*~K~MmXj+;QAtEY8U42L0P|o(0-v#!8bh=!(R2Y z*x=ZJYYhuq?3I1jgn1!p%ZK|1$M`+XiymgtW~(#2K}PjCx!vu}&dvkf-Sc`k)=xWbm8X-j4MTWhX< z@jXoD_$xm7(%Yh{@6x4xs}N$_=)U*o8&e@$^g5lck!fBs=WqW0r}@9*AGzPAKdk?8 F`V%mT!(9LX literal 0 HcmV?d00001 diff --git a/Chapter10/ListViewEx/ListViewEx.cpp b/Chapter10/ListViewEx/ListViewEx.cpp new file mode 100644 index 0000000..f92b6ba --- /dev/null +++ b/Chapter10/ListViewEx/ListViewEx.cpp @@ -0,0 +1,16 @@ +// ListViewEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace ListViewEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/ListViewEx/ListViewEx.vcproj b/Chapter10/ListViewEx/ListViewEx.vcproj new file mode 100644 index 0000000..3cdf33b --- /dev/null +++ b/Chapter10/ListViewEx/ListViewEx.vcproj @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/ListViewEx/resource.h b/Chapter10/ListViewEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/ListViewEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/ListViewEx/stdafx.cpp b/Chapter10/ListViewEx/stdafx.cpp new file mode 100644 index 0000000..2641476 --- /dev/null +++ b/Chapter10/ListViewEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ListViewEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/ListViewEx/stdafx.h b/Chapter10/ListViewEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/ListViewEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/MonthCalendarEx/AssemblyInfo.cpp b/Chapter10/MonthCalendarEx/AssemblyInfo.cpp new file mode 100644 index 0000000..1c03c6f --- /dev/null +++ b/Chapter10/MonthCalendarEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("MonthCalendarEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("MonthCalendarEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/MonthCalendarEx/Form1.h b/Chapter10/MonthCalendarEx/Form1.h new file mode 100644 index 0000000..7a2edbe --- /dev/null +++ b/Chapter10/MonthCalendarEx/Form1.h @@ -0,0 +1,105 @@ +#pragma once + + +namespace MonthCalendarEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::Label^ End; + System::Windows::Forms::Label^ Start; + System::Windows::Forms::MonthCalendar^ monthCal; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->End = (gcnew System::Windows::Forms::Label()); + this->Start = (gcnew System::Windows::Forms::Label()); + this->monthCal = (gcnew System::Windows::Forms::MonthCalendar()); + this->SuspendLayout(); + // + // End + // + this->End->BorderStyle = + System::Windows::Forms::BorderStyle::FixedSingle; + this->End->Location = System::Drawing::Point(230, 323); + this->End->Name = L"End"; + this->End->Size = System::Drawing::Size(83, 20); + this->End->TabIndex = 5; + // + // Start + // + this->Start->BorderStyle = + System::Windows::Forms::BorderStyle::FixedSingle; + this->Start->Location = System::Drawing::Point(122, 323); + this->Start->Name = L"Start"; + this->Start->Size = System::Drawing::Size(83, 20); + this->Start->TabIndex = 4; + // + // monthCal + // + this->monthCal->AnnuallyBoldedDates = + gcnew cli::array< System::DateTime >(1) + {System::DateTime(2004, 12, 31, 0, 0, 0, 0)}; + this->monthCal->CalendarDimensions = System::Drawing::Size(2, 2); + this->monthCal->Location = System::Drawing::Point(13, 11); + this->monthCal->MaxSelectionCount = 365; + this->monthCal->MonthlyBoldedDates = + gcnew cli::array< System::DateTime >(2) + {System::DateTime(2004, 10, 1, 0, 0, 0, 0), + System::DateTime(2004, 10, 15, 0, 0, 0, 0)}; + this->monthCal->Name = L"monthCal"; + this->monthCal->ShowWeekNumbers = true; + this->monthCal->Size = System::Drawing::Size(410, 297); + this->monthCal->TabIndex = 3; + this->monthCal->DateChanged += + gcnew System::Windows::Forms::DateRangeEventHandler(this, + &Form1::monthCal_DateChanged); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(436, 355); + this->Controls->Add(this->End); + this->Controls->Add(this->Start); + this->Controls->Add(this->monthCal); + this->Name = L"Form1"; + this->Text = L"Month Calendar"; + this->ResumeLayout(false); + + } +#pragma endregion + private: + System::Void monthCal_DateChanged(System::Object^ sender, + System::Windows::Forms::DateRangeEventArgs^ e) + { + // Update start and end range labels when date changes + Start->Text = e->Start.Date.ToShortDateString(); + End->Text = e->End.Date.ToShortDateString(); + } + }; +} + diff --git a/Chapter10/MonthCalendarEx/Form1.resx b/Chapter10/MonthCalendarEx/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter10/MonthCalendarEx/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter10/MonthCalendarEx/MonthCalendarEx.cpp b/Chapter10/MonthCalendarEx/MonthCalendarEx.cpp new file mode 100644 index 0000000..b54102b --- /dev/null +++ b/Chapter10/MonthCalendarEx/MonthCalendarEx.cpp @@ -0,0 +1,16 @@ +// MonthCalendarEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace MonthCalendarEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/MonthCalendarEx/MonthCalendarEx.vcproj b/Chapter10/MonthCalendarEx/MonthCalendarEx.vcproj new file mode 100644 index 0000000..794b390 --- /dev/null +++ b/Chapter10/MonthCalendarEx/MonthCalendarEx.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/MonthCalendarEx/resource.h b/Chapter10/MonthCalendarEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/MonthCalendarEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/MonthCalendarEx/stdafx.cpp b/Chapter10/MonthCalendarEx/stdafx.cpp new file mode 100644 index 0000000..79ad161 --- /dev/null +++ b/Chapter10/MonthCalendarEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MonthCalendarEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/MonthCalendarEx/stdafx.h b/Chapter10/MonthCalendarEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/MonthCalendarEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/NotifyIconEx/AssemblyInfo.cpp b/Chapter10/NotifyIconEx/AssemblyInfo.cpp new file mode 100644 index 0000000..f1e17da --- /dev/null +++ b/Chapter10/NotifyIconEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("NotifyIconEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("NotifyIconEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/NotifyIconEx/Form1.h b/Chapter10/NotifyIconEx/Form1.h new file mode 100644 index 0000000..877391d --- /dev/null +++ b/Chapter10/NotifyIconEx/Form1.h @@ -0,0 +1,138 @@ +#pragma once + + +namespace NotifyIconEx { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Button^ bnTaskBar; + System::Windows::Forms::Button^ bnNotify; + System::Windows::Forms::NotifyIcon^ notifyIcon; + System::Windows::Forms::ContextMenuStrip^ menuExit; + System::Windows::Forms::ToolStripMenuItem^ miExit; + System::ComponentModel::IContainer^ components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->components = (gcnew System::ComponentModel::Container()); + System::ComponentModel::ComponentResourceManager^ resources = + (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); + this->bnTaskBar = (gcnew System::Windows::Forms::Button()); + this->bnNotify = (gcnew System::Windows::Forms::Button()); + this->notifyIcon = + (gcnew System::Windows::Forms::NotifyIcon(this->components)); + this->menuExit = + (gcnew System::Windows::Forms::ContextMenuStrip(this->components)); + this->miExit = (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->menuExit->SuspendLayout(); + this->SuspendLayout(); + // + // bnTaskBar + // + this->bnTaskBar->Location = System::Drawing::Point(28, 59); + this->bnTaskBar->Name = L"bnTaskBar"; + this->bnTaskBar->Size = System::Drawing::Size(131, 23); + this->bnTaskBar->TabIndex = 3; + this->bnTaskBar->Text = L"Toggle TaskBar Icon"; + this->bnTaskBar->Click += + gcnew System::EventHandler(this, &Form1::bnTaskBar_Click); + // + // bnNotify + // + this->bnNotify->Location = System::Drawing::Point(28, 12); + this->bnNotify->Name = L"bnNotify"; + this->bnNotify->Size = System::Drawing::Size(131, 23); + this->bnNotify->TabIndex = 2; + this->bnNotify->Text = L"Toggle Notify Icon"; + this->bnNotify->Click += + gcnew System::EventHandler(this, &Form1::bnNotify_Click); + // + // notifyIcon + // + this->notifyIcon->ContextMenuStrip = this->menuExit; + this->notifyIcon->Icon = (cli::safe_cast + (resources->GetObject(L"notifyIcon.Icon"))); + this->notifyIcon->Text = L"Notify Icon Example"; + this->notifyIcon->Visible = true; + // + // menuExit + // + this->menuExit->Items->AddRange( + gcnew cli::array< System::Windows::Forms::ToolStripItem^>(1) + {this->miExit}); + this->menuExit->Name = L"miExit"; + this->menuExit->RightToLeft = + System::Windows::Forms::RightToLeft::No; + this->menuExit->Size = System::Drawing::Size(153, 48); + // + // miExit + // + this->miExit->Name = L"miExit"; + this->miExit->Size = System::Drawing::Size(152, 22); + this->miExit->Text = L"E&xit"; + this->miExit->Click += + gcnew System::EventHandler(this, &Form1::miExit_Click); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(192, 106); + this->Controls->Add(this->bnTaskBar); + this->Controls->Add(this->bnNotify); + this->Icon = (cli::safe_cast + (resources->GetObject(L"$this.Icon"))); + this->Name = L"Form1"; + this->Text = L"Notify Icon"; + this->menuExit->ResumeLayout(false); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void bnNotify_Click(System::Object^ sender, + System::EventArgs^ e) + { + notifyIcon->Visible = !notifyIcon->Visible; + } + + System::Void bnTaskBar_Click(System::Object^ sender, + System::EventArgs^ e) + { + this->ShowInTaskbar = ! this->ShowInTaskbar; + } + + System::Void miExit_Click(System::Object^ sender, + System::EventArgs^ e) + { + Application::Exit(); + } + }; +} + diff --git a/Chapter10/NotifyIconEx/Form1.resx b/Chapter10/NotifyIconEx/Form1.resx new file mode 100644 index 0000000..2e5ccf1 --- /dev/null +++ b/Chapter10/NotifyIconEx/Form1.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 118, 17 + + + + + AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC + AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ + AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAkAAAkAAJAAmZkAAAAAAAC5AAC5AAuQC7uwmQAAAAAAsJAAuZALALAA + C7AAAAAAAAuQC7uQuQuQAAAAAACQAAALCQsLkLALkAALkAALkAAAALm5C5uQC5AAm5mQm5mQAAC5uQub + AAsJC7u7C7u7AAAAsLALuQAAuQALkAALkAAAAAuQALkAALCQCwAACwAAAAALkAC5AAALCQAJAAAAAAAA + C5AAuQAAALCZuQAAAAAAAAsAALAAAAALu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//w////A + A///AAD//gAAf/gAAB/wAAAP8AAAD+AAAAfAAAADwAAAA4AAAAGAAAABgAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAAGAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/wAAAP+AAAH/4AAH//AAD//8AD///8 + P/8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA + AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQmQkJmQAAALC7C5u7CQCQububsAALkLkLu7C5ALu7uwuw + sAuZCwCwCwCwALsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+B8AAPAP + AADAAwAAwAMAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAwAMAAMADAADwDwAA+B8AAA== + + + + + AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC + AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ + AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAkAAAkAAJAAmZkAAAAAAAC5AAC5AAuQC7uwmQAAAAAAsJAAuZALALAA + C7AAAAAAAAuQC7uQuQuQAAAAAACQAAALCQsLkLALkAALkAALkAAAALm5C5uQC5AAm5mQm5mQAAC5uQub + AAsJC7u7C7u7AAAAsLALuQAAuQALkAALkAAAAAuQALkAALCQCwAACwAAAAALkAC5AAALCQAJAAAAAAAA + C5AAuQAAALCZuQAAAAAAAAsAALAAAAALu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//w////A + A///AAD//gAAf/gAAB/wAAAP8AAAD+AAAAfAAAADwAAAA4AAAAGAAAABgAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAAGAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/wAAAP+AAAH/4AAH//AAD//8AD///8 + P/8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA + AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQmQkJmQAAALC7C5u7CQCQububsAALkLkLu7C5ALu7uwuw + sAuZCwCwCwCwALsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+B8AAPAP + AADAAwAAwAMAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAwAMAAMADAADwDwAA+B8AAA== + + + \ No newline at end of file diff --git a/Chapter10/NotifyIconEx/Images/app.ico b/Chapter10/NotifyIconEx/Images/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..14f4ee82864b10f474343ee9a4ed6fe0017e05ec GIT binary patch literal 1078 zcmdT@F-`+95S-+Y&}k)dKgd-mzkr|NC%Col6K*Xxeo9KplqnEq#*Rf5iGl+5cGjNt zuGhsJu)`kfxhels8I=0?IKVQxlX!puD6ospF@1Jpz{lQ21{Pj{o^R)7hv~k9xlVZNrhN literal 0 HcmV?d00001 diff --git a/Chapter10/NotifyIconEx/NotifyIconEx.cpp b/Chapter10/NotifyIconEx/NotifyIconEx.cpp new file mode 100644 index 0000000..5be094e --- /dev/null +++ b/Chapter10/NotifyIconEx/NotifyIconEx.cpp @@ -0,0 +1,16 @@ +// NotifyIconEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace NotifyIconEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/NotifyIconEx/NotifyIconEx.vcproj b/Chapter10/NotifyIconEx/NotifyIconEx.vcproj new file mode 100644 index 0000000..010a94a --- /dev/null +++ b/Chapter10/NotifyIconEx/NotifyIconEx.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/NotifyIconEx/resource.h b/Chapter10/NotifyIconEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/NotifyIconEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/NotifyIconEx/stdafx.cpp b/Chapter10/NotifyIconEx/stdafx.cpp new file mode 100644 index 0000000..64eab1e --- /dev/null +++ b/Chapter10/NotifyIconEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// NotifyIconEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/NotifyIconEx/stdafx.h b/Chapter10/NotifyIconEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/NotifyIconEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/PictureBoxEx/AssemblyInfo.cpp b/Chapter10/PictureBoxEx/AssemblyInfo.cpp new file mode 100644 index 0000000..21a73ad --- /dev/null +++ b/Chapter10/PictureBoxEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("PictureBoxEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("PictureBoxEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/PictureBoxEx/Form1.h b/Chapter10/PictureBoxEx/Form1.h new file mode 100644 index 0000000..3924e45 --- /dev/null +++ b/Chapter10/PictureBoxEx/Form1.h @@ -0,0 +1,76 @@ +#pragma once + + +namespace PictureBoxEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::PictureBox^ pictureBox1; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + System::ComponentModel::ComponentResourceManager^ resources = + (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); + this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox()); + (cli::safe_cast + (this->pictureBox1))->BeginInit(); + this->SuspendLayout(); + // + // pictureBox1 + // + this->pictureBox1->Anchor = + static_cast + ((((System::Windows::Forms::AnchorStyles::Top + | System::Windows::Forms::AnchorStyles::Bottom) + | System::Windows::Forms::AnchorStyles::Left) + | System::Windows::Forms::AnchorStyles::Right)); + this->pictureBox1->Image = (cli::safe_cast + (resources->GetObject(L"pictureBox1.Image"))); + this->pictureBox1->Location = System::Drawing::Point(12, 12); + this->pictureBox1->Name = L"pictureBox1"; + this->pictureBox1->Size = System::Drawing::Size(369, 287); + this->pictureBox1->SizeMode = + System::Windows::Forms::PictureBoxSizeMode::StretchImage; + this->pictureBox1->TabIndex = 0; + this->pictureBox1->TabStop = false; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(393, 311); + this->Controls->Add(this->pictureBox1); + this->Name = L"Form1"; + this->Text = L"Shaina Shoshana"; + (cli::safe_cast + (this->pictureBox1))->EndInit(); + this->ResumeLayout(false); + } +#pragma endregion + }; +} diff --git a/Chapter10/PictureBoxEx/Form1.resx b/Chapter10/PictureBoxEx/Form1.resx new file mode 100644 index 0000000..e4a6364 --- /dev/null +++ b/Chapter10/PictureBoxEx/Form1.resx @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwg + JC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy + MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEgAYEDASIAAhEBAxEB/8QA + HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh + MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW + V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG + x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF + BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV + YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq + 8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCwaTHpTz1pD+dIQwim7akIOf8A61JigCPFLjjin7c4pwWnYQzH + FKBT9tKAMUDGYpO9S7aQJzQK4ymtjjnipivrWXqWq2unxNJO/A4AHepk7IpK5ZL8fKPqaPMCHB5IHY1y + E3jS0CnEcoJIPHQ1XXxYZWd47fYAcjJ6Cs+dmns2dm04/g5pFvIc4MihvrXFXfidJcBcgnnJHNVZfEXP + 3wwPJGKXOw5D0USrg5PSoZbkgFY9pb1PauCh8UW6gb3mZsdu1Sw+KoUUgrJknrRzsPZncRzYTPGfapVc + MCa4qPxVBGq4D7jwQw4X3q/beJLNgAZh65IIo9pYPZs6XhjxStgHI6VmQ6tZzIDC4ZvrVqKZ2b2PrVqa + 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 + + + \ No newline at end of file diff --git a/Chapter10/PictureBoxEx/Images/shainaOK.JPG b/Chapter10/PictureBoxEx/Images/shainaOK.JPG new file mode 100644 index 0000000000000000000000000000000000000000..4d238f8872180ee0cf51b666c0ed31bf42acb11c GIT binary patch literal 14158 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 literal 0 HcmV?d00001 diff --git a/Chapter10/PictureBoxEx/PictureBoxEx.cpp b/Chapter10/PictureBoxEx/PictureBoxEx.cpp new file mode 100644 index 0000000..a277419 --- /dev/null +++ b/Chapter10/PictureBoxEx/PictureBoxEx.cpp @@ -0,0 +1,16 @@ +// PictureBoxEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace PictureBoxEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/PictureBoxEx/PictureBoxEx.vcproj b/Chapter10/PictureBoxEx/PictureBoxEx.vcproj new file mode 100644 index 0000000..407ee1e --- /dev/null +++ b/Chapter10/PictureBoxEx/PictureBoxEx.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/PictureBoxEx/resource.h b/Chapter10/PictureBoxEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/PictureBoxEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/PictureBoxEx/stdafx.cpp b/Chapter10/PictureBoxEx/stdafx.cpp new file mode 100644 index 0000000..e621c7a --- /dev/null +++ b/Chapter10/PictureBoxEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// PictureBoxEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/PictureBoxEx/stdafx.h b/Chapter10/PictureBoxEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/PictureBoxEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/SimpleMenu/AssemblyInfo.cpp b/Chapter10/SimpleMenu/AssemblyInfo.cpp new file mode 100644 index 0000000..73d49e2 --- /dev/null +++ b/Chapter10/SimpleMenu/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SimpleMenu")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SimpleMenu")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/SimpleMenu/Form1.h b/Chapter10/SimpleMenu/Form1.h new file mode 100644 index 0000000..0c28bfa --- /dev/null +++ b/Chapter10/SimpleMenu/Form1.h @@ -0,0 +1,240 @@ +#pragma once + + +namespace SimpleMenu { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::ToolStripContainer^ toolStripContainer1; + System::Windows::Forms::MenuStrip^ mainMenuStrip; + System::Windows::Forms::ToolStripMenuItem^ miFile; + System::Windows::Forms::ToolStripMenuItem^ miFileSub; + System::Windows::Forms::ToolStripComboBox^ miFileSubThis; + System::Windows::Forms::ToolStripMenuItem^ miFileExit; + System::Windows::Forms::ToolStripMenuItem^ miFileSubCheck; + System::Windows::Forms::ToolStripMenuItem^ miFileSubImage; + System::Windows::Forms::ToolStripMenuItem^ miFileSubSayBoo; + System::Windows::Forms::ToolStripMenuItem^ miHelp; + System::Windows::Forms::ToolStripMenuItem^ miHelpAbout; + System::Windows::Forms::ToolStripSeparator^ miFileSep1; + + System::ComponentModel::IContainer^ components; + + private: + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + System::ComponentModel::ComponentResourceManager^ resources = + (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); + this->toolStripContainer1 = + (gcnew System::Windows::Forms::ToolStripContainer()); + this->mainMenuStrip = (gcnew System::Windows::Forms::MenuStrip()); + this->miFile = (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->miFileSub = + (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->miFileSubThis = + (gcnew System::Windows::Forms::ToolStripComboBox()); + this->miFileSubCheck = + (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->miFileSubImage = + (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->miFileSubSayBoo = + (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->miFileSep1 = + (gcnew System::Windows::Forms::ToolStripSeparator()); + this->miFileExit = + (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->miHelp = + (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->miHelpAbout = + (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->toolStripContainer1->TopToolStripPanel->SuspendLayout(); + this->toolStripContainer1->SuspendLayout(); + this->mainMenuStrip->SuspendLayout(); + this->SuspendLayout(); + // + // toolStripContainer1 + // + // + // toolStripContainer1.ContentPanel + // + this->toolStripContainer1->ContentPanel->Size = + System::Drawing::Size(292, 249); + this->toolStripContainer1->Dock = + System::Windows::Forms::DockStyle::Fill; + this->toolStripContainer1->Location = System::Drawing::Point(0, 0); + this->toolStripContainer1->Name = L"toolStripContainer1"; + this->toolStripContainer1->Size = System::Drawing::Size(292, 273); + this->toolStripContainer1->TabIndex = 0; + this->toolStripContainer1->Text = L"toolStripContainer1"; + // + // toolStripContainer1.TopToolStripPanel + // + this->toolStripContainer1->TopToolStripPanel->Controls->Add( + this->mainMenuStrip); + // + // mainMenuStrip + // + this->mainMenuStrip->Dock =System::Windows::Forms::DockStyle::None; + this->mainMenuStrip->Items->AddRange( + gcnew cli::array< System::Windows::Forms::ToolStripItem^>(2) + {this->miFile, this->miHelp}); + this->mainMenuStrip->Location = System::Drawing::Point(0, 0); + this->mainMenuStrip->Name = L"mainMenuStrip"; + this->mainMenuStrip->Size = System::Drawing::Size(292, 24); + this->mainMenuStrip->TabIndex = 0; + this->mainMenuStrip->Text = L"menuStrip1"; + // + // miFile + // + this->miFile->DropDownItems->AddRange( + gcnew cli::array< System::Windows::Forms::ToolStripItem^>(3) + {this->miFileSub, this->miFileSep1, this->miFileExit}); + this->miFile->Name = L"miFile"; + this->miFile->Size = System::Drawing::Size(35, 20); + this->miFile->Text = L"&File"; + // + // miFileSub + // + this->miFileSub->DropDownItems->AddRange( + gcnew cli::array< System::Windows::Forms::ToolStripItem^>(4) + {this->miFileSubThis, this->miFileSubCheck, + this->miFileSubImage, this->miFileSubSayBoo}); + this->miFileSub->Name = L"miFileSub"; + this->miFileSub->Size = System::Drawing::Size(152, 22); + this->miFileSub->Text = L"&Sub"; + // + // miFileSubThis + // + this->miFileSubThis->Items->AddRange( + gcnew cli::array< System::Object^>(3) + {L"This", L"That", L"Other Thing"}); + this->miFileSubThis->Name = L"miFileSubThis"; + this->miFileSubThis->Size = System::Drawing::Size(121, 21); + // + // miFileSubCheck + // + this->miFileSubCheck->Checked = true; + this->miFileSubCheck->CheckOnClick = true; + this->miFileSubCheck->CheckState = + System::Windows::Forms::CheckState::Checked; + this->miFileSubCheck->Name = L"miFileSubCheck"; + this->miFileSubCheck->Size = System::Drawing::Size(181, 22); + this->miFileSubCheck->Text = L"Check Me"; + // + // miFileSubImage + // + this->miFileSubImage->Image = + (cli::safe_cast + (resources->GetObject(L"miFileSubImage.Image"))); + this->miFileSubImage->Name = L"miFileSubImage"; + this->miFileSubImage->Size = System::Drawing::Size(181, 22); + this->miFileSubImage->Text = L"I have an image"; + // + // miFileSubSayBoo + // + this->miFileSubSayBoo->Name = L"miFileSubSayBoo"; + this->miFileSubSayBoo->ShortcutKeys = + static_cast + ((System::Windows::Forms::Keys::Control | + System::Windows::Forms::Keys::S)); + this->miFileSubSayBoo->Size = System::Drawing::Size(181, 22); + this->miFileSubSayBoo->Text = L"Say Boo"; + this->miFileSubSayBoo->Click += + gcnew System::EventHandler(this,&Form1::miFileSubSayBoo_Click); + // + // miFileSep1 + // + this->miFileSep1->Name = L"miFileSep1"; + this->miFileSep1->Size = System::Drawing::Size(149, 6); + // + // miFileExit + // + this->miFileExit->Name = L"miFileExit"; + this->miFileExit->Size = System::Drawing::Size(152, 22); + this->miFileExit->Text = L"E&xit"; + this->miFileExit->Click += + gcnew System::EventHandler(this, &Form1::miFileExit_Click); + // + // miHelp + // + this->miHelp->DropDownItems->AddRange( + gcnew cli::array< System::Windows::Forms::ToolStripItem^>(1) + {this->miHelpAbout}); + this->miHelp->Name = L"miHelp"; + this->miHelp->Size = System::Drawing::Size(40, 20); + this->miHelp->Text = L"&Help"; + // + // miHelpAbout + // + this->miHelpAbout->Name = L"miHelpAbout"; + this->miHelpAbout->Size = System::Drawing::Size(152, 22); + this->miHelpAbout->Text = L"About"; + this->miHelpAbout->Click += + gcnew System::EventHandler(this, &Form1::miHelpAbout_Click); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Controls->Add(this->toolStripContainer1); + this->MainMenuStrip = this->mainMenuStrip; + this->Name = L"Form1"; + this->Text = L"Simple Menu"; + this->toolStripContainer1->TopToolStripPanel->ResumeLayout(false); + this->toolStripContainer1->TopToolStripPanel->PerformLayout(); + this->toolStripContainer1->ResumeLayout(false); + this->toolStripContainer1->PerformLayout(); + this->mainMenuStrip->ResumeLayout(false); + this->mainMenuStrip->PerformLayout(); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void miFileExit_Click(System::Object^ sender, + System::EventArgs^ e) + { + Application::Exit(); + } + + System::Void miHelpAbout_Click(System::Object^ sender, + System::EventArgs^ e) + { + MessageBox::Show("Simple Menu v.1.0.0.0"); + } + + System::Void miFileSubSayBoo_Click(System::Object^ sender, + System::EventArgs^ e) + { + MessageBox::Show("BOO"); + } + }; +} + diff --git a/Chapter10/SimpleMenu/Form1.resx b/Chapter10/SimpleMenu/Form1.resx new file mode 100644 index 0000000..714b908 --- /dev/null +++ b/Chapter10/SimpleMenu/Form1.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAH1JREFUOE/Nk0sO + wCAIROvNvTkNRizg8FnWhA06T4RxPHhRkB9B/qRZSEQ4eG8H5IRCD0SQtlhgHmIAUqo7jM6sp1y3dwAM + lyp+CIjGGE3jak7mA70He1AZCQHMJLbFYGPn/CZW+WBBdWixHqH2dNuN6X+oepCJTTX+CZHwBRkr1T3o + ssMyAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Chapter10/SimpleMenu/Images/happy.ico b/Chapter10/SimpleMenu/Images/happy.ico new file mode 100644 index 0000000000000000000000000000000000000000..6d10f6993cabb1e0e1825aca77ba1d53031954df GIT binary patch literal 1078 zcmb7DJ5s|i5PgoBNs$@i8^jfpJ5a#QP(i_Q+`G|HTvDb?!Jxdi(#lE*!?5=Le;Vxy z=&->!4iJ29fG6@{$ojDZ9(&+O+emyRc6cBqFxElQIYX9UKSGd1N!2va9^=m{13mZ*^{ZdTIXVIbe-3H*}u|Ny7ub;wZ5*j>F)PaO}ek<#CZbMYvD}= zMGHzsotGaad#`Ca?NbU}`Uc* ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/SimpleMenu/SimpleMenu.vcproj b/Chapter10/SimpleMenu/SimpleMenu.vcproj new file mode 100644 index 0000000..8e4bf7f --- /dev/null +++ b/Chapter10/SimpleMenu/SimpleMenu.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/SimpleMenu/resource.h b/Chapter10/SimpleMenu/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/SimpleMenu/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/SimpleMenu/stdafx.cpp b/Chapter10/SimpleMenu/stdafx.cpp new file mode 100644 index 0000000..9c9e11a --- /dev/null +++ b/Chapter10/SimpleMenu/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SimpleMenu.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/SimpleMenu/stdafx.h b/Chapter10/SimpleMenu/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/SimpleMenu/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/SplitContainerEx/AssemblyInfo.cpp b/Chapter10/SplitContainerEx/AssemblyInfo.cpp new file mode 100644 index 0000000..f6a27e8 --- /dev/null +++ b/Chapter10/SplitContainerEx/AssemblyInfo.cpp @@ -0,0 +1,63 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SplitContainerEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SplitContainerEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright © 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft CLR Framework documentation for more information on assembly signing. +// +// You can use the attributes below to control which key is used for signing. +// You can also use the project property page for signing under Common Properties +// to set the same information. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft CLR Framework +// documentation for more information on this. +// +//[assembly:AssemblyDelaySignAttribute(false)]; +//[assembly:AssemblyKeyFileAttribute("")]; +//[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/SplitContainerEx/Form1.h b/Chapter10/SplitContainerEx/Form1.h new file mode 100644 index 0000000..6cf5f71 --- /dev/null +++ b/Chapter10/SplitContainerEx/Form1.h @@ -0,0 +1,158 @@ +#pragma once + +namespace SplitContainerEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::SplitContainer^ splitContainer1; + System::Windows::Forms::TextBox^ textBox1; + System::Windows::Forms::SplitContainer^ splitContainer2; + System::Windows::Forms::TextBox^ textBox2; + System::Windows::Forms::TextBox^ textBox3; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->splitContainer1 = + (gcnew System::Windows::Forms::SplitContainer()); + this->textBox1 = (gcnew System::Windows::Forms::TextBox()); + this->splitContainer2 = + (gcnew System::Windows::Forms::SplitContainer()); + this->textBox2 = (gcnew System::Windows::Forms::TextBox()); + this->textBox3 = (gcnew System::Windows::Forms::TextBox()); + this->splitContainer1->Panel1->SuspendLayout(); + this->splitContainer1->Panel2->SuspendLayout(); + this->splitContainer1->SuspendLayout(); + this->splitContainer2->Panel1->SuspendLayout(); + this->splitContainer2->Panel2->SuspendLayout(); + this->splitContainer2->SuspendLayout(); + this->SuspendLayout(); + // + // splitContainer1 + // + this->splitContainer1->BackColor = System::Drawing::Color::Green; + this->splitContainer1->Dock = + System::Windows::Forms::DockStyle::Fill; + this->splitContainer1->Location = System::Drawing::Point(0, 0); + this->splitContainer1->Name = L"splitContainer1"; + // + // splitContainer1.Panel1 + // + this->splitContainer1->Panel1->Controls->Add(this->textBox1); + // + // splitContainer1.Panel2 + // + this->splitContainer1->Panel2->Controls->Add(this->splitContainer2); + this->splitContainer1->Size = System::Drawing::Size(292, 273); + this->splitContainer1->SplitterDistance = 116; + this->splitContainer1->TabIndex = 1; + this->splitContainer1->Text = L"splitContainer1"; + // + // textBox1 + // + this->textBox1->AutoSize = false; + this->textBox1->BorderStyle = + System::Windows::Forms::BorderStyle::None; + this->textBox1->Dock = System::Windows::Forms::DockStyle::Fill; + this->textBox1->Location = System::Drawing::Point(0, 0); + this->textBox1->Name = L"textBox1"; + this->textBox1->Size = System::Drawing::Size(116, 273); + this->textBox1->TabIndex = 0; + this->textBox1->Text = L"Left Textbox"; + this->textBox1->TextAlign = + System::Windows::Forms::HorizontalAlignment::Center; + // + // splitContainer2 + // + this->splitContainer2->BackColor = System::Drawing::Color::Red; + this->splitContainer2->Location = System::Drawing::Point(18, 82); + this->splitContainer2->Name = L"splitContainer2"; + this->splitContainer2->Orientation = + System::Windows::Forms::Orientation::Horizontal; + // + // splitContainer2.Panel1 + // + this->splitContainer2->Panel1->Controls->Add(this->textBox2); + // + // splitContainer2.Panel2 + // + this->splitContainer2->Panel2->Controls->Add(this->textBox3); + this->splitContainer2->Size = System::Drawing::Size(132, 102); + this->splitContainer2->SplitterDistance = 42; + this->splitContainer2->TabIndex = 0; + this->splitContainer2->Text = L"splitContainer2"; + // + // textBox2 + // + this->textBox2->AutoSize = false; + this->textBox2->BorderStyle = + System::Windows::Forms::BorderStyle::None; + this->textBox2->Dock = System::Windows::Forms::DockStyle::Fill; + this->textBox2->Location = System::Drawing::Point(0, 0); + this->textBox2->Name = L"textBox2"; + this->textBox2->Size = System::Drawing::Size(132, 42); + this->textBox2->TabIndex = 0; + this->textBox2->Text = L"Top Right Textbox"; + this->textBox2->TextAlign = + System::Windows::Forms::HorizontalAlignment::Center; + // + // textBox3 + // + this->textBox3->AutoSize = false; + this->textBox3->BorderStyle = + System::Windows::Forms::BorderStyle::None; + this->textBox3->Dock = System::Windows::Forms::DockStyle::Fill; + this->textBox3->Location = System::Drawing::Point(0, 0); + this->textBox3->Name = L"textBox3"; + this->textBox3->Size = System::Drawing::Size(132, 56); + this->textBox3->TabIndex = 0; + this->textBox3->Text = L"Bottom Right Textbox"; + this->textBox3->TextAlign = + System::Windows::Forms::HorizontalAlignment::Center; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Controls->Add(this->splitContainer1); + this->Name = L"Form1"; + this->Text = L"Form1"; + this->splitContainer1->Panel1->ResumeLayout(false); + this->splitContainer1->Panel2->ResumeLayout(false); + this->splitContainer1->ResumeLayout(false); + this->splitContainer2->Panel1->ResumeLayout(false); + this->splitContainer2->Panel2->ResumeLayout(false); + this->splitContainer2->ResumeLayout(false); + this->ResumeLayout(false); + } +#pragma endregion + }; +} + + diff --git a/Chapter10/SplitContainerEx/Form1.resx b/Chapter10/SplitContainerEx/Form1.resx new file mode 100644 index 0000000..02bbfa2 --- /dev/null +++ b/Chapter10/SplitContainerEx/Form1.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter10/SplitContainerEx/SplitContainerEx.cpp b/Chapter10/SplitContainerEx/SplitContainerEx.cpp new file mode 100644 index 0000000..cf69a27 --- /dev/null +++ b/Chapter10/SplitContainerEx/SplitContainerEx.cpp @@ -0,0 +1,16 @@ +// SplitContainerEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace SplitContainerEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/SplitContainerEx/SplitContainerEx.vcproj b/Chapter10/SplitContainerEx/SplitContainerEx.vcproj new file mode 100644 index 0000000..465c5b7 --- /dev/null +++ b/Chapter10/SplitContainerEx/SplitContainerEx.vcproj @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/SplitContainerEx/resource.h b/Chapter10/SplitContainerEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/SplitContainerEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/SplitContainerEx/stdafx.cpp b/Chapter10/SplitContainerEx/stdafx.cpp new file mode 100644 index 0000000..f46cce8 --- /dev/null +++ b/Chapter10/SplitContainerEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SplitContainerEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/SplitContainerEx/stdafx.h b/Chapter10/SplitContainerEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/SplitContainerEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/StatusStripEx/AssemblyInfo.cpp b/Chapter10/StatusStripEx/AssemblyInfo.cpp new file mode 100644 index 0000000..982bf8a --- /dev/null +++ b/Chapter10/StatusStripEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("StatusStripEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("StatusStripEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/StatusStripEx/Form1.h b/Chapter10/StatusStripEx/Form1.h new file mode 100644 index 0000000..f7b4079 --- /dev/null +++ b/Chapter10/StatusStripEx/Form1.h @@ -0,0 +1,171 @@ +#pragma once + + +namespace StatusStripEx { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::ToolStripContainer^ tsContainer; + System::Windows::Forms::StatusStrip^ statusStrip1; + System::Windows::Forms::ToolStripStatusLabel^ statusButtons; + System::Windows::Forms::ToolStripStatusLabel^ statusXCoord; + System::Windows::Forms::ToolStripStatusLabel^ statusYCoord; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->tsContainer = + (gcnew System::Windows::Forms::ToolStripContainer()); + this->statusStrip1 = + (gcnew System::Windows::Forms::StatusStrip()); + this->statusButtons = + (gcnew System::Windows::Forms::ToolStripStatusLabel()); + this->statusXCoord = + (gcnew System::Windows::Forms::ToolStripStatusLabel()); + this->statusYCoord = + (gcnew System::Windows::Forms::ToolStripStatusLabel()); + this->tsContainer->BottomToolStripPanel->SuspendLayout(); + this->tsContainer->SuspendLayout(); + this->statusStrip1->SuspendLayout(); + this->SuspendLayout(); + // + // tsContainer + // + // + // tsContainer.BottomToolStripPanel + // + this->tsContainer->BottomToolStripPanel->Controls->Add( + this->statusStrip1); + // + // tsContainer.ContentPanel + // + this->tsContainer->ContentPanel->Size = + System::Drawing::Size(292, 251); + this->tsContainer->ContentPanel->MouseDown += + gcnew System::Windows::Forms::MouseEventHandler(this, + &Form1::tsContainer_ContentPanel_MouseDown); + this->tsContainer->ContentPanel->MouseMove += + gcnew System::Windows::Forms::MouseEventHandler(this, + &Form1::tsContainer1_ContentPanel_MouseMove); + this->tsContainer->Dock = System::Windows::Forms::DockStyle::Fill; + this->tsContainer->Location = System::Drawing::Point(0, 0); + this->tsContainer->Name = L"tsContainer"; + this->tsContainer->Size = System::Drawing::Size(292, 273); + this->tsContainer->TabIndex = 0; + this->tsContainer->Text = L"toolStripContainer1"; + // + // statusStrip1 + // + this->statusStrip1->Dock = System::Windows::Forms::DockStyle::None; + this->statusStrip1->Items->AddRange( + gcnew cli::array< System::Windows::Forms::ToolStripItem^>(3) + {this->statusButtons, this->statusXCoord, this->statusYCoord}); + this->statusStrip1->Location = System::Drawing::Point(0, 0); + this->statusStrip1->Name = L"statusStrip1"; + this->statusStrip1->Size = System::Drawing::Size(292, 22); + this->statusStrip1->TabIndex = 0; + // + // statusButtons + // + this->statusButtons->Name = L"statusButtons"; + this->statusButtons->Size = System::Drawing::Size(177, 17); + this->statusButtons->Spring = true; + this->statusButtons->TextAlign = + System::Drawing::ContentAlignment::MiddleLeft; + // + // statusXCoord + // + this->statusXCoord->AutoSize = false; + this->statusXCoord->BorderSides = + static_cast + ((((System::Windows::Forms::ToolStripStatusLabelBorderSides::Left + | System::Windows::Forms::ToolStripStatusLabelBorderSides::Top) + | System::Windows::Forms::ToolStripStatusLabelBorderSides::Right) + | System::Windows::Forms::ToolStripStatusLabelBorderSides::Bottom)); + this->statusXCoord->BorderStyle = + System::Windows::Forms::Border3DStyle::Sunken; + this->statusXCoord->Name = L"statusXCoord"; + this->statusXCoord->Size = System::Drawing::Size(50, 17); + // + // statusYCoord + // + this->statusYCoord->AutoSize = false; + this->statusYCoord->BorderSides = + static_cast + ((((System::Windows::Forms::ToolStripStatusLabelBorderSides::Left + | System::Windows::Forms::ToolStripStatusLabelBorderSides::Top) + | System::Windows::Forms::ToolStripStatusLabelBorderSides::Right) + | System::Windows::Forms::ToolStripStatusLabelBorderSides::Bottom)); + this->statusYCoord->BorderStyle = + System::Windows::Forms::Border3DStyle::Sunken; + this->statusYCoord->Name = L"statusYCoord"; + this->statusYCoord->Size = System::Drawing::Size(50, 17); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Controls->Add(this->tsContainer); + this->Name = L"Form1"; + this->Text = L"Status Strip Mouse Tracking"; + this->tsContainer->BottomToolStripPanel->ResumeLayout(false); + this->tsContainer->BottomToolStripPanel->PerformLayout(); + this->tsContainer->ResumeLayout(false); + this->tsContainer->PerformLayout(); + this->statusStrip1->ResumeLayout(false); + this->statusStrip1->PerformLayout(); + this->ResumeLayout(false); + + } +#pragma endregion + +private: + System::Void tsContainer_ContentPanel_MouseDown(System::Object^ sender, + System::Windows::Forms::MouseEventArgs^ e) + { + // clicked mouse button in first status bar panel + if (e->Button == System::Windows::Forms::MouseButtons::Right) + statusButtons->Text = "Right"; + else if (e->Button == System::Windows::Forms::MouseButtons::Left) + statusButtons->Text = "Left"; + else + statusButtons->Text = "Middle"; + } + + System::Void tsContainer1_ContentPanel_MouseMove(System::Object^ sender, + System::Windows::Forms::MouseEventArgs^ e) + { + // x,y coords in second and third status bar panels + statusXCoord->Text = String::Format("X={0}", e->X); + statusYCoord->Text = String::Format("Y={0}", e->Y); + } + }; +} + diff --git a/Chapter10/StatusStripEx/Form1.resx b/Chapter10/StatusStripEx/Form1.resx new file mode 100644 index 0000000..d26a846 --- /dev/null +++ b/Chapter10/StatusStripEx/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter10/StatusStripEx/StatusStripEx.cpp b/Chapter10/StatusStripEx/StatusStripEx.cpp new file mode 100644 index 0000000..cba4a7f --- /dev/null +++ b/Chapter10/StatusStripEx/StatusStripEx.cpp @@ -0,0 +1,16 @@ +// StatusStripEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace StatusStripEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/StatusStripEx/StatusStripEx.vcproj b/Chapter10/StatusStripEx/StatusStripEx.vcproj new file mode 100644 index 0000000..70a071c --- /dev/null +++ b/Chapter10/StatusStripEx/StatusStripEx.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/StatusStripEx/resource.h b/Chapter10/StatusStripEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/StatusStripEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/StatusStripEx/stdafx.cpp b/Chapter10/StatusStripEx/stdafx.cpp new file mode 100644 index 0000000..7e36619 --- /dev/null +++ b/Chapter10/StatusStripEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// StatusStripEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/StatusStripEx/stdafx.h b/Chapter10/StatusStripEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/StatusStripEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/TabControlEx/AssemblyInfo.cpp b/Chapter10/TabControlEx/AssemblyInfo.cpp new file mode 100644 index 0000000..648f2ed --- /dev/null +++ b/Chapter10/TabControlEx/AssemblyInfo.cpp @@ -0,0 +1,63 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("TabControlEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("TabControlEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright © 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft CLR Framework documentation for more information on assembly signing. +// +// You can use the attributes below to control which key is used for signing. +// You can also use the project property page for signing under Common Properties +// to set the same information. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft CLR Framework +// documentation for more information on this. +// +//[assembly:AssemblyDelaySignAttribute(false)]; +//[assembly:AssemblyKeyFileAttribute("")]; +//[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/TabControlEx/Form1.h b/Chapter10/TabControlEx/Form1.h new file mode 100644 index 0000000..d990bf6 --- /dev/null +++ b/Chapter10/TabControlEx/Form1.h @@ -0,0 +1,132 @@ +#pragma once + +namespace TabControlEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::TabControl^ tabControl1; + System::Windows::Forms::TabPage^ tabPage1; + System::Windows::Forms::Label^ label2; + System::Windows::Forms::TabPage^ tabPage2; + System::Windows::Forms::Label^ label1; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->tabControl1 = (gcnew System::Windows::Forms::TabControl()); + this->tabPage1 = (gcnew System::Windows::Forms::TabPage()); + this->label2 = (gcnew System::Windows::Forms::Label()); + this->tabPage2 = (gcnew System::Windows::Forms::TabPage()); + this->label1 = (gcnew System::Windows::Forms::Label()); + this->tabControl1->SuspendLayout(); + this->tabPage1->SuspendLayout(); + this->tabPage2->SuspendLayout(); + this->SuspendLayout(); + // + // tabControl1 + // + this->tabControl1->Alignment = + System::Windows::Forms::TabAlignment::Bottom; + this->tabControl1->Controls->Add(this->tabPage1); + this->tabControl1->Controls->Add(this->tabPage2); + this->tabControl1->Dock = System::Windows::Forms::DockStyle::Fill; + this->tabControl1->HotTrack = true; + this->tabControl1->Location = System::Drawing::Point(0, 0); + this->tabControl1->Multiline = true; + this->tabControl1->Name = L"tabControl1"; + this->tabControl1->SelectedIndex = 0; + this->tabControl1->ShowToolTips = true; + this->tabControl1->Size = System::Drawing::Size(215, 129); + this->tabControl1->TabIndex = 1; + // + // tabPage1 + // + this->tabPage1->BackColor = System::Drawing::Color::PaleGreen; + this->tabPage1->Controls->Add(this->label2); + this->tabPage1->Location = System::Drawing::Point(4, 4); + this->tabPage1->Name = L"tabPage1"; + this->tabPage1->Padding = System::Windows::Forms::Padding(3); + this->tabPage1->Size = System::Drawing::Size(207, 103); + this->tabPage1->TabIndex = 0; + this->tabPage1->Text = L"Tab One"; + this->tabPage1->ToolTipText = L"This is tab one"; + this->tabPage1->UseVisualStyleBackColor = false; + // + // label2 + // + this->label2->AutoSize = true; + this->label2->Location = System::Drawing::Point(61, 44); + this->label2->Name = L"label2"; + this->label2->Size = System::Drawing::Size(78, 13); + this->label2->TabIndex = 1; + this->label2->Text = L"This is Tab One"; + // + // tabPage2 + // + this->tabPage2->BackColor = System::Drawing::Color::Plum; + this->tabPage2->Controls->Add(this->label1); + this->tabPage2->Location = System::Drawing::Point(4, 4); + this->tabPage2->Name = L"tabPage2"; + this->tabPage2->Padding = System::Windows::Forms::Padding(3); + this->tabPage2->Size = System::Drawing::Size(207, 103); + this->tabPage2->TabIndex = 1; + this->tabPage2->Text = L"Tab Two"; + this->tabPage2->ToolTipText = L"This is tab two"; + this->tabPage2->UseVisualStyleBackColor = false; + // + // label1 + // + this->label1->AutoSize = true; + this->label1->Location = System::Drawing::Point(61, 44); + this->label1->Name = L"label1"; + this->label1->Size = System::Drawing::Size(79, 13); + this->label1->TabIndex = 0; + this->label1->Text = L"This is Tab Two"; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(215, 129); + this->Controls->Add(this->tabControl1); + this->Name = L"Form1"; + this->Text = L"Tab Control Example"; + this->tabControl1->ResumeLayout(false); + this->tabPage1->ResumeLayout(false); + this->tabPage1->PerformLayout(); + this->tabPage2->ResumeLayout(false); + this->tabPage2->PerformLayout(); + this->ResumeLayout(false); + + } +#pragma endregion + }; +} + + diff --git a/Chapter10/TabControlEx/Form1.resx b/Chapter10/TabControlEx/Form1.resx new file mode 100644 index 0000000..02bbfa2 --- /dev/null +++ b/Chapter10/TabControlEx/Form1.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter10/TabControlEx/TabControlEx.cpp b/Chapter10/TabControlEx/TabControlEx.cpp new file mode 100644 index 0000000..e7cc5d9 --- /dev/null +++ b/Chapter10/TabControlEx/TabControlEx.cpp @@ -0,0 +1,16 @@ +// TabControlEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace TabControlEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/TabControlEx/TabControlEx.vcproj b/Chapter10/TabControlEx/TabControlEx.vcproj new file mode 100644 index 0000000..5abd7cb --- /dev/null +++ b/Chapter10/TabControlEx/TabControlEx.vcproj @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/TabControlEx/resource.h b/Chapter10/TabControlEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/TabControlEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/TabControlEx/stdafx.cpp b/Chapter10/TabControlEx/stdafx.cpp new file mode 100644 index 0000000..a391b4b --- /dev/null +++ b/Chapter10/TabControlEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// TabControlEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/TabControlEx/stdafx.h b/Chapter10/TabControlEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/TabControlEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/ToolStripEx/AssemblyInfo.cpp b/Chapter10/ToolStripEx/AssemblyInfo.cpp new file mode 100644 index 0000000..833df9f --- /dev/null +++ b/Chapter10/ToolStripEx/AssemblyInfo.cpp @@ -0,0 +1,63 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ToolStripEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ToolStripEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright © 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft CLR Framework documentation for more information on assembly signing. +// +// You can use the attributes below to control which key is used for signing. +// You can also use the project property page for signing under Common Properties +// to set the same information. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft CLR Framework +// documentation for more information on this. +// +//[assembly:AssemblyDelaySignAttribute(false)]; +//[assembly:AssemblyKeyFileAttribute("")]; +//[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/ToolStripEx/Form1.h b/Chapter10/ToolStripEx/Form1.h new file mode 100644 index 0000000..80d912d --- /dev/null +++ b/Chapter10/ToolStripEx/Form1.h @@ -0,0 +1,167 @@ +#pragma once + + +namespace ToolStripEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Label^ lbOutput; + System::Windows::Forms::ToolStrip^ toolStrip; + System::Windows::Forms::ToolStripButton^ tsbnHappy; + System::Windows::Forms::ToolStripButton^ tsbnSad; + System::Windows::Forms::ToolStripSeparator^ Sep1; + System::Windows::Forms::ToolStripLabel^ Label; + System::Windows::Forms::ToolStripTextBox^ tstbName; + System::Windows::Forms::ToolStripContainer^ toolStripContainer1; + + + + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); + this->lbOutput = (gcnew System::Windows::Forms::Label()); + this->toolStrip = (gcnew System::Windows::Forms::ToolStrip()); + this->tsbnHappy = (gcnew System::Windows::Forms::ToolStripButton()); + this->tsbnSad = (gcnew System::Windows::Forms::ToolStripButton()); + this->Sep1 = (gcnew System::Windows::Forms::ToolStripSeparator()); + this->Label = (gcnew System::Windows::Forms::ToolStripLabel()); + this->tstbName = (gcnew System::Windows::Forms::ToolStripTextBox()); + this->toolStripContainer1 = (gcnew System::Windows::Forms::ToolStripContainer()); + this->toolStrip->SuspendLayout(); + this->toolStripContainer1->ContentPanel->SuspendLayout(); + this->toolStripContainer1->TopToolStripPanel->SuspendLayout(); + this->toolStripContainer1->SuspendLayout(); + this->SuspendLayout(); + // + // lbOutput + // + this->lbOutput->AutoSize = true; + this->lbOutput->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, + static_cast(0))); + this->lbOutput->Location = System::Drawing::Point(47, 42); + this->lbOutput->Name = L"lbOutput"; + this->lbOutput->Size = System::Drawing::Size(208, 13); + this->lbOutput->TabIndex = 7; + this->lbOutput->Text = L"Enter a name then click an emotion"; + // + // toolStrip + // + this->toolStrip->Dock = System::Windows::Forms::DockStyle::None; + this->toolStrip->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(5) {this->tsbnHappy, this->tsbnSad, + this->Sep1, this->Label, this->tstbName}); + this->toolStrip->Location = System::Drawing::Point(0, 0); + this->toolStrip->Name = L"toolStrip"; + this->toolStrip->Size = System::Drawing::Size(300, 25); + this->toolStrip->Stretch = true; + this->toolStrip->TabIndex = 6; + this->toolStrip->Text = L"toolStrip1"; + // + // tsbnHappy + // + this->tsbnHappy->Image = (cli::safe_cast(resources->GetObject(L"tsbnHappy.Image"))); + this->tsbnHappy->Name = L"tsbnHappy"; + this->tsbnHappy->Size = System::Drawing::Size(58, 22); + this->tsbnHappy->Text = L"Happy"; + this->tsbnHappy->ToolTipText = L"a happy camper"; + this->tsbnHappy->Click += gcnew System::EventHandler(this, &Form1::tsbn_Click); + // + // tsbnSad + // + this->tsbnSad->Image = (cli::safe_cast(resources->GetObject(L"tsbnSad.Image"))); + this->tsbnSad->Name = L"tsbnSad"; + this->tsbnSad->Size = System::Drawing::Size(45, 22); + this->tsbnSad->Text = L"Sad"; + this->tsbnSad->ToolTipText = L"major gloomy"; + this->tsbnSad->Click += gcnew System::EventHandler(this, &Form1::tsbn_Click); + // + // Sep1 + // + this->Sep1->Name = L"Sep1"; + this->Sep1->Size = System::Drawing::Size(6, 25); + // + // Label + // + this->Label->Name = L"Label"; + this->Label->Size = System::Drawing::Size(34, 22); + this->Label->Text = L"Name"; + // + // tstbName + // + this->tstbName->Name = L"tstbName"; + this->tstbName->Size = System::Drawing::Size(92, 25); + this->tstbName->Text = L"Computer"; + // + // toolStripContainer1 + // + // + // toolStripContainer1.ContentPanel + // + this->toolStripContainer1->ContentPanel->Controls->Add(this->lbOutput); + this->toolStripContainer1->ContentPanel->Size = System::Drawing::Size(300, 105); + this->toolStripContainer1->Location = System::Drawing::Point(0, 0); + this->toolStripContainer1->Name = L"toolStripContainer1"; + this->toolStripContainer1->Size = System::Drawing::Size(300, 130); + this->toolStripContainer1->TabIndex = 8; + this->toolStripContainer1->Text = L"toolStripContainer1"; + // + // toolStripContainer1.TopToolStripPanel + // + this->toolStripContainer1->TopToolStripPanel->Controls->Add(this->toolStrip); + // + // Form1 + // + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Inherit; + this->ClientSize = System::Drawing::Size(300, 129); + this->Controls->Add(this->toolStripContainer1); + this->Name = L"Form1"; + this->Text = L"Emotional Tool Strip"; + this->toolStrip->ResumeLayout(false); + this->toolStrip->PerformLayout(); + this->toolStripContainer1->ContentPanel->ResumeLayout(false); + this->toolStripContainer1->ContentPanel->PerformLayout(); + this->toolStripContainer1->TopToolStripPanel->ResumeLayout(false); + this->toolStripContainer1->TopToolStripPanel->PerformLayout(); + this->toolStripContainer1->ResumeLayout(false); + this->toolStripContainer1->PerformLayout(); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void tsbn_Click(System::Object^ sender, System::EventArgs^ e) + { + this->lbOutput->Text = String::Format("{0} is {1}!", tstbName->Text, ((ToolStripButton^)sender)->ToolTipText); + } + }; +} + + diff --git a/Chapter10/ToolStripEx/Form1.resx b/Chapter10/ToolStripEx/Form1.resx new file mode 100644 index 0000000..fa0a78a --- /dev/null +++ b/Chapter10/ToolStripEx/Form1.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAH1JREFUOE/Nk0sO + wCAIROvNvTkNRizg8FnWhA06T4RxPHhRkB9B/qRZSEQ4eG8H5IRCD0SQtlhgHmIAUqo7jM6sp1y3dwAM + lyp+CIjGGE3jak7mA70He1AZCQHMJLbFYGPn/CZW+WBBdWixHqH2dNuN6X+oepCJTTX+CZHwBRkr1T3o + ssMyAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHxJREFUOE/Nk0sO + wCAIROvNvTmNRijiTCFd1YQNwuPfLvyE6BvRm3o4igiW8bcEcqhjBCJI2VlhEbIBNNVgjGxmKUf0CmDA + NYsfAtgY2TSOEnq3+rTOuVglgDpz46fpfpSWRbaJ6R58BcB9SG4C30OWwdsxeaLv/jaJGPYGZLLVPX6l + YeIAAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/Chapter10/ToolStripEx/ToolStripEx.cpp b/Chapter10/ToolStripEx/ToolStripEx.cpp new file mode 100644 index 0000000..06a3ccd --- /dev/null +++ b/Chapter10/ToolStripEx/ToolStripEx.cpp @@ -0,0 +1,16 @@ +// ToolStripEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace ToolStripEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/ToolStripEx/ToolStripEx.vcproj b/Chapter10/ToolStripEx/ToolStripEx.vcproj new file mode 100644 index 0000000..1d9a2d4 --- /dev/null +++ b/Chapter10/ToolStripEx/ToolStripEx.vcproj @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/ToolStripEx/resource.h b/Chapter10/ToolStripEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/ToolStripEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/ToolStripEx/stdafx.cpp b/Chapter10/ToolStripEx/stdafx.cpp new file mode 100644 index 0000000..77a792b --- /dev/null +++ b/Chapter10/ToolStripEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ToolStripEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/ToolStripEx/stdafx.h b/Chapter10/ToolStripEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/ToolStripEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter10/TreeViewEx/AssemblyInfo.cpp b/Chapter10/TreeViewEx/AssemblyInfo.cpp new file mode 100644 index 0000000..1ddae91 --- /dev/null +++ b/Chapter10/TreeViewEx/AssemblyInfo.cpp @@ -0,0 +1,63 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("TreeViewEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("TreeViewEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright © 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft CLR Framework documentation for more information on assembly signing. +// +// You can use the attributes below to control which key is used for signing. +// You can also use the project property page for signing under Common Properties +// to set the same information. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft CLR Framework +// documentation for more information on this. +// +//[assembly:AssemblyDelaySignAttribute(false)]; +//[assembly:AssemblyKeyFileAttribute("")]; +//[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter10/TreeViewEx/Form1.h b/Chapter10/TreeViewEx/Form1.h new file mode 100644 index 0000000..04dd289 --- /dev/null +++ b/Chapter10/TreeViewEx/Form1.h @@ -0,0 +1,141 @@ +#pragma once + +namespace TreeViewEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::TreeView^ tView; + System::Windows::Forms::ImageList^ imFolders; + System::ComponentModel::IContainer^ components; + +#pragma region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + void InitializeComponent(void) + { + this->components = (gcnew System::ComponentModel::Container()); + System::Windows::Forms::TreeNode^ treeNode1 = + (gcnew System::Windows::Forms::TreeNode(L"")); + System::Windows::Forms::TreeNode^ treeNode2 = + (gcnew System::Windows::Forms::TreeNode( + L"Root Node A", 0, 1, + gcnew cli::array< System::Windows::Forms::TreeNode^ >(1) + {treeNode1})); + System::Windows::Forms::TreeNode^ treeNode3 = + (gcnew System::Windows::Forms::TreeNode(L"")); + System::Windows::Forms::TreeNode^ treeNode4 = + (gcnew System::Windows::Forms::TreeNode( + L"Root Node B", 0, 1, + gcnew cli::array< System::Windows::Forms::TreeNode^ >(1) + {treeNode3})); + System::ComponentModel::ComponentResourceManager^ resources = + (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); + this->tView = (gcnew System::Windows::Forms::TreeView()); + this->imFolders = + (gcnew System::Windows::Forms::ImageList(this->components)); + this->SuspendLayout(); + // + // tView + // + this->tView->Dock = System::Windows::Forms::DockStyle::Fill; + this->tView->ImageIndex = 0; + this->tView->ImageList = this->imFolders; + this->tView->LabelEdit = true; + this->tView->Location = System::Drawing::Point(0, 0); + this->tView->Name = L"tView"; + treeNode1->Name = L"Node1"; + treeNode1->Text = L""; + treeNode2->ImageIndex = 0; + treeNode2->Name = L"Node0"; + treeNode2->SelectedImageIndex = 1; + treeNode2->Text = L"Root Node A"; + treeNode3->Name = L"Node3"; + treeNode3->Text = L""; + treeNode4->ImageIndex = 0; + treeNode4->Name = L"Node2"; + treeNode4->SelectedImageIndex = 1; + treeNode4->Text = L"Root Node B"; + this->tView->Nodes->AddRange( + gcnew cli::array< System::Windows::Forms::TreeNode^ >(2) + {treeNode2, treeNode4}); + this->tView->SelectedImageIndex = 1; + this->tView->Size = System::Drawing::Size(194, 481); + this->tView->TabIndex = 0; + this->tView->BeforeExpand += + gcnew System::Windows::Forms::TreeViewCancelEventHandler(this, + &Form1::tView_BeforeExpand); + // + // imFolders + // + this->imFolders->ImageStream = + (cli::safe_cast + (resources->GetObject(L"imFolders.ImageStream"))); + this->imFolders->Images->SetKeyName(0, L"CLSDFOLD.ICO"); + this->imFolders->Images->SetKeyName(1, L"OPENFOLD.ICO"); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(194, 481); + this->Controls->Add(this->tView); + this->Name = L"Form1"; + this->Text = L"Tree View Example"; + this->ResumeLayout(false); + + } +#pragma endregion + private: + System::Void tView_BeforeExpand(System::Object^ sender, + System::Windows::Forms::TreeViewCancelEventArgs^ e) + { + // Already expanded before? + if (e->Node->Nodes->Count > 1) + return; // Already expanded + else if (e->Node->Nodes->Count == 1) + { + if (e->Node->Nodes[0]->Text->Equals("")) + e->Node->Nodes->RemoveAt(0); // Node ready for expanding + else + return; // Already expanded but only one sub node + } + // Randomly expand the Node + Random ^rand = gcnew Random(); + int rnd = rand->Next(1,5); + for (int i = 0; i < rnd; i++) // Randon number of sub nodes + { + TreeNode ^stn = + gcnew TreeNode(String::Format("Sub Node {0}", i+1), 0, 1); + e->Node->Nodes->Add(stn); + + if (rand->Next(2) == 1) // Has sub sub-nodes + stn->Nodes->Add(gcnew TreeNode("", 0, 1)); + } + } + }; +} \ No newline at end of file diff --git a/Chapter10/TreeViewEx/Form1.resx b/Chapter10/TreeViewEx/Form1.resx new file mode 100644 index 0000000..3febece --- /dev/null +++ b/Chapter10/TreeViewEx/Form1.resx @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAs + CQAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/8EADuwEAAzsIgAB7AH/ + AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsBAAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AewiAAHsAf8BBwH7 + AQcB+wEHAfsBBwH7AQcB+wEHAewDAAHsAf8B+wEHAfsBBwH7AQcB+wEHAfsBBwEAAewhAAHsAf8B+wEH + AfsBBwH7AQcB+wEHAfsBBwH7AewDAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB7AEAAewhAAHsAf8BBwH7 + AQcB+wEHAfsBBwH7AQcB+wEHAewCAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEAAuwhAAHsAf8B+wEH + AfsBBwH7AQcB+wEHAfsBBwH7AewCAAHsCv8B7AEAAQcB7CEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7 + AQcB7AIADewB+wHsIQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsAwAB7AH/AQcB+wEHAfsBBwH7 + AQcB+wEHAfsBBwHsIQAB7Az/AewDAAHsAf8B+wEHAfsBBwH7AQcF/wHsIQAB7AEHAfsBBwH7AQcB+wEH + BuwDAAHsAf8BBwH7AQcB+wEHAf8G7CIAAewBBwH7AQcB+wEHAewKAAHsBf8B7CkABewMAAXsaAABQgFN + AT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEABP8EAAT/BAABgAEBAeAGAAEBAcAGAAEB + AcAGAAEBAYAGAAEBAYAGAAEBBwABAQcAAQEHAAEBAYAGAAEBAYAGAAEDAYABAQQAAYAB/wHAAX8EAAHB + Af8B4AH/BAAE/wQACw== + + + \ No newline at end of file diff --git a/Chapter10/TreeViewEx/Images/CLSDFOLD.ICO b/Chapter10/TreeViewEx/Images/CLSDFOLD.ICO new file mode 100644 index 0000000000000000000000000000000000000000..adfd173a80adb7c0f173fc243cf36ba221f01672 GIT binary patch literal 1078 zcmd^9F%H5o47^gLY^YD@gm?x|LSiUeEin|S&tZTu{DhH_jY{e2Dm~gSK1U z0$wuXnSHarnX!Qx=BTO?iq|=C$7fjve>DSc7Ql*Q73GmK!xc3kjJ*sYNk$|*sA*CJ z&N&i;|6>@`qVT6fs{V`OK7~QirJ%n{VX#i=4%nph7CFB^zr?wreV@1^cz#Gw+TAl_bt5;{Zo43pZOQRDyI2utzdPUFyD@a3LCVe z%K)7@(Oe-;{EGO+^1DXWv(*la9mUa3Md+tO_Zx&Ghg@{cMUUIzgoojs$NkXGi_kvT z&aWtApF7%@A@Kn0Zw9Cq9isYkpZhd3&pyrjn0~RLY}PiunuTrjyvL;t;hV^JR;%&E p^lSXFuB}$X*Me2x5hsNAE#$^=R7IljF+pf~;dj6_jQ8&;@CmCUW8we+ literal 0 HcmV?d00001 diff --git a/Chapter10/TreeViewEx/TreeViewEx.cpp b/Chapter10/TreeViewEx/TreeViewEx.cpp new file mode 100644 index 0000000..403f141 --- /dev/null +++ b/Chapter10/TreeViewEx/TreeViewEx.cpp @@ -0,0 +1,16 @@ +// TreeViewEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace TreeViewEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter10/TreeViewEx/TreeViewEx.vcproj b/Chapter10/TreeViewEx/TreeViewEx.vcproj new file mode 100644 index 0000000..f68c7ad --- /dev/null +++ b/Chapter10/TreeViewEx/TreeViewEx.vcproj @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter10/TreeViewEx/resource.h b/Chapter10/TreeViewEx/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter10/TreeViewEx/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter10/TreeViewEx/stdafx.cpp b/Chapter10/TreeViewEx/stdafx.cpp new file mode 100644 index 0000000..8dcebf1 --- /dev/null +++ b/Chapter10/TreeViewEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// TreeViewEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter10/TreeViewEx/stdafx.h b/Chapter10/TreeViewEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter10/TreeViewEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/Chapter11.sln b/Chapter11/Chapter11.sln new file mode 100644 index 0000000..cf2e6de --- /dev/null +++ b/Chapter11/Chapter11.sln @@ -0,0 +1,134 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloGDI", "HelloGDI\HelloGDI.vcproj", "{BD9DA4A5-D189-4FB4-AAA7-1DD2A740DCB6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OnPaintWhere", "OnPaintWhere\OnPaintWhere.vcproj", "{9E90B430-A308-40C4-B6D6-0C5C9EAB0535}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloGDI_OnPaint", "HelloGDI_OnPaint\HelloGDI_OnPaint.vcproj", "{283072E8-6ED6-4A75-AEE2-744763E0ACFB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DisappearingCoords", "DisappearingCoords\DisappearingCoords.vcproj", "{4157C521-881D-44CA-902A-7AF609BC4A82}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CorrectingCoords", "CorrectingCoords\CorrectingCoords.vcproj", "{F33F5E58-7F29-4FD1-8FC5-570E6E3BDBE1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NewUnitsOrigin", "NewUnitsOrigin\NewUnitsOrigin.vcproj", "{C82F3F5E-3F84-4E68-9142-B3B1352D0F23}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InterOrUnion", "InterOrUnion\InterOrUnion.vcproj", "{1640CD24-A9DF-4E28-864E-8524EF68CB73}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RegionEx", "RegionEx\RegionEx.vcproj", "{9E1C26F4-CE4C-4893-B955-2BAA6971CC76}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StringRect", "StringRect\StringRect.vcproj", "{03092038-12FC-4CA4-B517-037F643F29AD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DownwardStringRect", "DownwardStringRect\DownwardStringRect.vcproj", "{07FA1D77-2BB4-42E0-9D62-6355EB697E25}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FontsGalore", "FontsGalore\FontsGalore.vcproj", "{A4777E86-7DFF-417A-8470-2273056C3BFF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DrawingLines", "DrawingLines\DrawingLines.vcproj", "{D50CF418-4C67-4F4E-AFB8-B26C15CFD0FB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TextureBrushEx", "TextureBrushEx\TextureBrushEx.vcproj", "{6DDE2259-9932-4BA9-98CF-33A2BEB6B2EE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DrawImageEx", "DrawImageEx\DrawImageEx.vcproj", "{DC9D2C88-4F1E-43F7-9454-33959F51842E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HappyFace", "HappyFace\HappyFace.vcproj", "{F9840F0D-62E3-441A-ABD0-E0A5F4A0F56A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScrollingHappyFace", "ScrollingHappyFace\ScrollingHappyFace.vcproj", "{6D9E6F62-DA3F-470F-847E-D089BBBE47C0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OptimizedHappyFace", "OptimizedHappyFace\OptimizedHappyFace.vcproj", "{C26C7F38-200C-4535-8304-EA87B4EF16CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SingleBuffering", "SingleBuffering\SingleBuffering.vcproj", "{D32071A7-6AC0-4ED7-BE57-CE11132823D7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DoubleBuffering", "DoubleBuffering\DoubleBuffering.vcproj", "{0AC75397-CD4F-4579-B3F0-E1D121B354FD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PrintHappyFace", "PrintHappyFace\PrintHappyFace.vcproj", "{7CEC43F0-0025-4B89-8470-5400D102532D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BD9DA4A5-D189-4FB4-AAA7-1DD2A740DCB6}.Debug|Win32.ActiveCfg = Debug|Win32 + {BD9DA4A5-D189-4FB4-AAA7-1DD2A740DCB6}.Debug|Win32.Build.0 = Debug|Win32 + {BD9DA4A5-D189-4FB4-AAA7-1DD2A740DCB6}.Release|Win32.ActiveCfg = Release|Win32 + {BD9DA4A5-D189-4FB4-AAA7-1DD2A740DCB6}.Release|Win32.Build.0 = Release|Win32 + {9E90B430-A308-40C4-B6D6-0C5C9EAB0535}.Debug|Win32.ActiveCfg = Debug|Win32 + {9E90B430-A308-40C4-B6D6-0C5C9EAB0535}.Debug|Win32.Build.0 = Debug|Win32 + {9E90B430-A308-40C4-B6D6-0C5C9EAB0535}.Release|Win32.ActiveCfg = Release|Win32 + {9E90B430-A308-40C4-B6D6-0C5C9EAB0535}.Release|Win32.Build.0 = Release|Win32 + {283072E8-6ED6-4A75-AEE2-744763E0ACFB}.Debug|Win32.ActiveCfg = Debug|Win32 + {283072E8-6ED6-4A75-AEE2-744763E0ACFB}.Debug|Win32.Build.0 = Debug|Win32 + {283072E8-6ED6-4A75-AEE2-744763E0ACFB}.Release|Win32.ActiveCfg = Release|Win32 + {283072E8-6ED6-4A75-AEE2-744763E0ACFB}.Release|Win32.Build.0 = Release|Win32 + {4157C521-881D-44CA-902A-7AF609BC4A82}.Debug|Win32.ActiveCfg = Debug|Win32 + {4157C521-881D-44CA-902A-7AF609BC4A82}.Debug|Win32.Build.0 = Debug|Win32 + {4157C521-881D-44CA-902A-7AF609BC4A82}.Release|Win32.ActiveCfg = Release|Win32 + {4157C521-881D-44CA-902A-7AF609BC4A82}.Release|Win32.Build.0 = Release|Win32 + {F33F5E58-7F29-4FD1-8FC5-570E6E3BDBE1}.Debug|Win32.ActiveCfg = Debug|Win32 + {F33F5E58-7F29-4FD1-8FC5-570E6E3BDBE1}.Debug|Win32.Build.0 = Debug|Win32 + {F33F5E58-7F29-4FD1-8FC5-570E6E3BDBE1}.Release|Win32.ActiveCfg = Release|Win32 + {F33F5E58-7F29-4FD1-8FC5-570E6E3BDBE1}.Release|Win32.Build.0 = Release|Win32 + {C82F3F5E-3F84-4E68-9142-B3B1352D0F23}.Debug|Win32.ActiveCfg = Debug|Win32 + {C82F3F5E-3F84-4E68-9142-B3B1352D0F23}.Debug|Win32.Build.0 = Debug|Win32 + {C82F3F5E-3F84-4E68-9142-B3B1352D0F23}.Release|Win32.ActiveCfg = Release|Win32 + {C82F3F5E-3F84-4E68-9142-B3B1352D0F23}.Release|Win32.Build.0 = Release|Win32 + {1640CD24-A9DF-4E28-864E-8524EF68CB73}.Debug|Win32.ActiveCfg = Debug|Win32 + {1640CD24-A9DF-4E28-864E-8524EF68CB73}.Debug|Win32.Build.0 = Debug|Win32 + {1640CD24-A9DF-4E28-864E-8524EF68CB73}.Release|Win32.ActiveCfg = Release|Win32 + {1640CD24-A9DF-4E28-864E-8524EF68CB73}.Release|Win32.Build.0 = Release|Win32 + {9E1C26F4-CE4C-4893-B955-2BAA6971CC76}.Debug|Win32.ActiveCfg = Debug|Win32 + {9E1C26F4-CE4C-4893-B955-2BAA6971CC76}.Debug|Win32.Build.0 = Debug|Win32 + {9E1C26F4-CE4C-4893-B955-2BAA6971CC76}.Release|Win32.ActiveCfg = Release|Win32 + {9E1C26F4-CE4C-4893-B955-2BAA6971CC76}.Release|Win32.Build.0 = Release|Win32 + {03092038-12FC-4CA4-B517-037F643F29AD}.Debug|Win32.ActiveCfg = Debug|Win32 + {03092038-12FC-4CA4-B517-037F643F29AD}.Debug|Win32.Build.0 = Debug|Win32 + {03092038-12FC-4CA4-B517-037F643F29AD}.Release|Win32.ActiveCfg = Release|Win32 + {03092038-12FC-4CA4-B517-037F643F29AD}.Release|Win32.Build.0 = Release|Win32 + {07FA1D77-2BB4-42E0-9D62-6355EB697E25}.Debug|Win32.ActiveCfg = Debug|Win32 + {07FA1D77-2BB4-42E0-9D62-6355EB697E25}.Debug|Win32.Build.0 = Debug|Win32 + {07FA1D77-2BB4-42E0-9D62-6355EB697E25}.Release|Win32.ActiveCfg = Release|Win32 + {07FA1D77-2BB4-42E0-9D62-6355EB697E25}.Release|Win32.Build.0 = Release|Win32 + {A4777E86-7DFF-417A-8470-2273056C3BFF}.Debug|Win32.ActiveCfg = Debug|Win32 + {A4777E86-7DFF-417A-8470-2273056C3BFF}.Debug|Win32.Build.0 = Debug|Win32 + {A4777E86-7DFF-417A-8470-2273056C3BFF}.Release|Win32.ActiveCfg = Release|Win32 + {A4777E86-7DFF-417A-8470-2273056C3BFF}.Release|Win32.Build.0 = Release|Win32 + {D50CF418-4C67-4F4E-AFB8-B26C15CFD0FB}.Debug|Win32.ActiveCfg = Debug|Win32 + {D50CF418-4C67-4F4E-AFB8-B26C15CFD0FB}.Debug|Win32.Build.0 = Debug|Win32 + {D50CF418-4C67-4F4E-AFB8-B26C15CFD0FB}.Release|Win32.ActiveCfg = Release|Win32 + {D50CF418-4C67-4F4E-AFB8-B26C15CFD0FB}.Release|Win32.Build.0 = Release|Win32 + {6DDE2259-9932-4BA9-98CF-33A2BEB6B2EE}.Debug|Win32.ActiveCfg = Debug|Win32 + {6DDE2259-9932-4BA9-98CF-33A2BEB6B2EE}.Debug|Win32.Build.0 = Debug|Win32 + {6DDE2259-9932-4BA9-98CF-33A2BEB6B2EE}.Release|Win32.ActiveCfg = Release|Win32 + {6DDE2259-9932-4BA9-98CF-33A2BEB6B2EE}.Release|Win32.Build.0 = Release|Win32 + {DC9D2C88-4F1E-43F7-9454-33959F51842E}.Debug|Win32.ActiveCfg = Debug|Win32 + {DC9D2C88-4F1E-43F7-9454-33959F51842E}.Debug|Win32.Build.0 = Debug|Win32 + {DC9D2C88-4F1E-43F7-9454-33959F51842E}.Release|Win32.ActiveCfg = Release|Win32 + {DC9D2C88-4F1E-43F7-9454-33959F51842E}.Release|Win32.Build.0 = Release|Win32 + {F9840F0D-62E3-441A-ABD0-E0A5F4A0F56A}.Debug|Win32.ActiveCfg = Debug|Win32 + {F9840F0D-62E3-441A-ABD0-E0A5F4A0F56A}.Debug|Win32.Build.0 = Debug|Win32 + {F9840F0D-62E3-441A-ABD0-E0A5F4A0F56A}.Release|Win32.ActiveCfg = Release|Win32 + {F9840F0D-62E3-441A-ABD0-E0A5F4A0F56A}.Release|Win32.Build.0 = Release|Win32 + {6D9E6F62-DA3F-470F-847E-D089BBBE47C0}.Debug|Win32.ActiveCfg = Debug|Win32 + {6D9E6F62-DA3F-470F-847E-D089BBBE47C0}.Debug|Win32.Build.0 = Debug|Win32 + {6D9E6F62-DA3F-470F-847E-D089BBBE47C0}.Release|Win32.ActiveCfg = Release|Win32 + {6D9E6F62-DA3F-470F-847E-D089BBBE47C0}.Release|Win32.Build.0 = Release|Win32 + {C26C7F38-200C-4535-8304-EA87B4EF16CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {C26C7F38-200C-4535-8304-EA87B4EF16CC}.Debug|Win32.Build.0 = Debug|Win32 + {C26C7F38-200C-4535-8304-EA87B4EF16CC}.Release|Win32.ActiveCfg = Release|Win32 + {C26C7F38-200C-4535-8304-EA87B4EF16CC}.Release|Win32.Build.0 = Release|Win32 + {D32071A7-6AC0-4ED7-BE57-CE11132823D7}.Debug|Win32.ActiveCfg = Debug|Win32 + {D32071A7-6AC0-4ED7-BE57-CE11132823D7}.Debug|Win32.Build.0 = Debug|Win32 + {D32071A7-6AC0-4ED7-BE57-CE11132823D7}.Release|Win32.ActiveCfg = Release|Win32 + {D32071A7-6AC0-4ED7-BE57-CE11132823D7}.Release|Win32.Build.0 = Release|Win32 + {0AC75397-CD4F-4579-B3F0-E1D121B354FD}.Debug|Win32.ActiveCfg = Debug|Win32 + {0AC75397-CD4F-4579-B3F0-E1D121B354FD}.Debug|Win32.Build.0 = Debug|Win32 + {0AC75397-CD4F-4579-B3F0-E1D121B354FD}.Release|Win32.ActiveCfg = Release|Win32 + {0AC75397-CD4F-4579-B3F0-E1D121B354FD}.Release|Win32.Build.0 = Release|Win32 + {7CEC43F0-0025-4B89-8470-5400D102532D}.Debug|Win32.ActiveCfg = Debug|Win32 + {7CEC43F0-0025-4B89-8470-5400D102532D}.Debug|Win32.Build.0 = Debug|Win32 + {7CEC43F0-0025-4B89-8470-5400D102532D}.Release|Win32.ActiveCfg = Release|Win32 + {7CEC43F0-0025-4B89-8470-5400D102532D}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter11/Chapter11.suo b/Chapter11/Chapter11.suo new file mode 100644 index 0000000000000000000000000000000000000000..166354c804746eee9fe5b1ab36d2c46122d6c37a GIT binary patch literal 31744 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 ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/CorrectingCoords/CorrectingCoords.vcproj b/Chapter11/CorrectingCoords/CorrectingCoords.vcproj new file mode 100644 index 0000000..7d326b8 --- /dev/null +++ b/Chapter11/CorrectingCoords/CorrectingCoords.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/CorrectingCoords/Form1.h b/Chapter11/CorrectingCoords/Form1.h new file mode 100644 index 0000000..f800897 --- /dev/null +++ b/Chapter11/CorrectingCoords/Form1.h @@ -0,0 +1,75 @@ +#pragma once + + +namespace CorrectingCoords +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + coords = gcnew ArrayList(); // Instantiate coords array + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + ArrayList ^coords; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Click and see coords"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->MouseDown += + gcnew System::Windows::Forms::MouseEventHandler(this, + &Form1::Form1_MouseDown); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_MouseDown(System::Object^ sender, + System::Windows::Forms::MouseEventArgs^ e) + { + coords->Add(Point(e->X, e->Y)); + Invalidate(); + } + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + for each (Point^ p in coords) + { + e->Graphics->DrawString(String::Format("({0},{1})",p->X,p->Y), + gcnew Drawing::Font("Courier New", 8), + Brushes::Black, (Single)p->X, (Single)p->Y); + } + } + }; +} + diff --git a/Chapter11/CorrectingCoords/Form1.resx b/Chapter11/CorrectingCoords/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/CorrectingCoords/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/CorrectingCoords/stdafx.cpp b/Chapter11/CorrectingCoords/stdafx.cpp new file mode 100644 index 0000000..9f3ffe3 --- /dev/null +++ b/Chapter11/CorrectingCoords/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// CorrectingCoords.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/CorrectingCoords/stdafx.h b/Chapter11/CorrectingCoords/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/CorrectingCoords/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/DisappearingCoords/AssemblyInfo.cpp b/Chapter11/DisappearingCoords/AssemblyInfo.cpp new file mode 100644 index 0000000..72600bc --- /dev/null +++ b/Chapter11/DisappearingCoords/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("DisappearingCoords")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("DisappearingCoords")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/DisappearingCoords/DisappearingCoords.cpp b/Chapter11/DisappearingCoords/DisappearingCoords.cpp new file mode 100644 index 0000000..a5cc5a8 --- /dev/null +++ b/Chapter11/DisappearingCoords/DisappearingCoords.cpp @@ -0,0 +1,16 @@ +// DisappearingCoords.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace DisappearingCoords; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/DisappearingCoords/DisappearingCoords.vcproj b/Chapter11/DisappearingCoords/DisappearingCoords.vcproj new file mode 100644 index 0000000..c31f139 --- /dev/null +++ b/Chapter11/DisappearingCoords/DisappearingCoords.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/DisappearingCoords/Form1.h b/Chapter11/DisappearingCoords/Form1.h new file mode 100644 index 0000000..89c32f6 --- /dev/null +++ b/Chapter11/DisappearingCoords/Form1.h @@ -0,0 +1,63 @@ +#pragma once + +namespace DisappearingCoords +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Click and see coords"; + this->MouseDown += + gcnew System::Windows::Forms::MouseEventHandler(this, + &Form1::Form1_MouseDown); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void Form1_MouseDown(System::Object^ sender, + System::Windows::Forms::MouseEventArgs^ e) + { + Graphics ^g = this->CreateGraphics(); + g->DrawString(String::Format("({0},{1})", e->X, e->Y), + gcnew Drawing::Font("Courier New", 8), + Brushes::Black, (Single)e->X, (Single)e->Y); + + delete g; // we delete of the Graphics object because we + // created it with the CreateGraphics() method. + } + }; +} + diff --git a/Chapter11/DisappearingCoords/Form1.resx b/Chapter11/DisappearingCoords/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/DisappearingCoords/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/DisappearingCoords/stdafx.cpp b/Chapter11/DisappearingCoords/stdafx.cpp new file mode 100644 index 0000000..b5c6217 --- /dev/null +++ b/Chapter11/DisappearingCoords/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// DisappearingCoords.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/DisappearingCoords/stdafx.h b/Chapter11/DisappearingCoords/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/DisappearingCoords/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/DoubleBuffering/AssemblyInfo.cpp b/Chapter11/DoubleBuffering/AssemblyInfo.cpp new file mode 100644 index 0000000..0b0ad72 --- /dev/null +++ b/Chapter11/DoubleBuffering/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("DoubleBuffering")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("DoubleBuffering")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/DoubleBuffering/DoubleBuffering.cpp b/Chapter11/DoubleBuffering/DoubleBuffering.cpp new file mode 100644 index 0000000..d6cc8f4 --- /dev/null +++ b/Chapter11/DoubleBuffering/DoubleBuffering.cpp @@ -0,0 +1,16 @@ +// DoubleBuffering.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace DoubleBuffering; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/DoubleBuffering/DoubleBuffering.vcproj b/Chapter11/DoubleBuffering/DoubleBuffering.vcproj new file mode 100644 index 0000000..6e759f4 --- /dev/null +++ b/Chapter11/DoubleBuffering/DoubleBuffering.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/DoubleBuffering/Form1.h b/Chapter11/DoubleBuffering/Form1.h new file mode 100644 index 0000000..3eb4ee2 --- /dev/null +++ b/Chapter11/DoubleBuffering/Form1.h @@ -0,0 +1,155 @@ +#pragma once + +namespace DoubleBuffering +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + this->SetStyle(ControlStyles::Opaque, true); + + dbBitmap = nullptr; + dbGraphics = nullptr; + X = -250; // Preset to be just left of window + + Form1_Resize(nullptr, EventArgs::Empty); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::Timer^ timer1; + System::ComponentModel::IContainer^ components; + + Bitmap^ dbBitmap; + Graphics^ dbGraphics; + int X; // Actual x coordinate of Happy face + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->components = (gcnew System::ComponentModel::Container()); + this->timer1 = + (gcnew System::Windows::Forms::Timer(this->components)); + this->SuspendLayout(); + // + // timer1 + // + this->timer1->Enabled = true; + this->timer1->Interval = 10; + this->timer1->Tick += + gcnew System::EventHandler(this, &Form1::timer1_Tick); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(500, 300); + this->Name = L"Form1"; + this->Text = L"Sliding Happy Face"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->Resize += + gcnew System::EventHandler(this, &Form1::Form1_Resize); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + // Move image at end of line start from beginning + if (X < ClientRectangle.Width) + { + X ++; + dbGraphics->TranslateTransform(1.0, 0.0); + } + else + { + X = -250; + dbGraphics->TranslateTransform( + (float)-(ClientRectangle.Width+250), 0.0); + } + + // Clear background + dbGraphics->Clear(Color::White); + + // redraw image from scratch + Pen^ b4pen = gcnew Pen(Color::Black, 4); + + Drawing::Rectangle Head = Drawing::Rectangle(0, 0, 250, 250); + dbGraphics->FillEllipse(Brushes::Yellow, Head); + dbGraphics->DrawEllipse(b4pen, Head); + + Drawing::Rectangle Mouth = Drawing::Rectangle(75, 150, 100, 50); + dbGraphics->FillPie(Brushes::White, Mouth,0,180); + dbGraphics->DrawPie(b4pen, Mouth, 0, 180); + + Drawing::Rectangle LEye = Drawing::Rectangle(75, 75, 25, 25); + dbGraphics->FillEllipse(Brushes::White, LEye); + dbGraphics->DrawEllipse(b4pen, LEye); + + Drawing::Rectangle REye = Drawing::Rectangle(150, 75, 25, 25); + dbGraphics->FillEllipse(Brushes::White, REye); + dbGraphics->DrawEllipse(b4pen, REye); + + // Make the buffer visible + e->Graphics->DrawImageUnscaled(dbBitmap, 0, 0); + + delete b4pen; + } + + System::Void Form1_Resize(System::Object^ sender, System::EventArgs^ e) + { + // Get rid of old stuff + if (dbGraphics != nullptr) + { + delete dbGraphics; + } + + if (dbBitmap != nullptr) + { + delete dbBitmap; + } + + if (ClientRectangle.Width > 0 && ClientRectangle.Height > 0) + { + // Create a bitmap + dbBitmap = gcnew Bitmap(ClientRectangle.Width, + ClientRectangle.Height); + + // Grab its Graphics + dbGraphics = Graphics::FromImage(dbBitmap); + + // Set up initial translation after resize (also at start) + dbGraphics->TranslateTransform((float)X, 25.0); + } + } + + System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) + { + // Move the image + Invalidate(); + } + }; +} + diff --git a/Chapter11/DoubleBuffering/Form1.resx b/Chapter11/DoubleBuffering/Form1.resx new file mode 100644 index 0000000..886d0de --- /dev/null +++ b/Chapter11/DoubleBuffering/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter11/DoubleBuffering/stdafx.cpp b/Chapter11/DoubleBuffering/stdafx.cpp new file mode 100644 index 0000000..247730e --- /dev/null +++ b/Chapter11/DoubleBuffering/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// DoubleBuffering.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/DoubleBuffering/stdafx.h b/Chapter11/DoubleBuffering/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/DoubleBuffering/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/DownwardStringRect/AssemblyInfo.cpp b/Chapter11/DownwardStringRect/AssemblyInfo.cpp new file mode 100644 index 0000000..a645cd2 --- /dev/null +++ b/Chapter11/DownwardStringRect/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("DownwardStringRect")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("DownwardStringRect")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/DownwardStringRect/DownwardStringRect.cpp b/Chapter11/DownwardStringRect/DownwardStringRect.cpp new file mode 100644 index 0000000..005683f --- /dev/null +++ b/Chapter11/DownwardStringRect/DownwardStringRect.cpp @@ -0,0 +1,16 @@ +// DownwardStringRect.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace DownwardStringRect; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/DownwardStringRect/DownwardStringRect.vcproj b/Chapter11/DownwardStringRect/DownwardStringRect.vcproj new file mode 100644 index 0000000..30434df --- /dev/null +++ b/Chapter11/DownwardStringRect/DownwardStringRect.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/DownwardStringRect/Form1.h b/Chapter11/DownwardStringRect/Form1.h new file mode 100644 index 0000000..40ee79a --- /dev/null +++ b/Chapter11/DownwardStringRect/Form1.h @@ -0,0 +1,68 @@ +#pragma once + +namespace DownwardStringRect +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(300, 145); + this->Name = L"Form1"; + this->Text = L"Downward String in a Rectangle"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + // create and configure the StringFormat object + StringFormat ^stringformat = gcnew StringFormat(); + stringformat->FormatFlags = StringFormatFlags::DirectionVertical; + stringformat->Alignment = StringAlignment::Center; + + // Draw the string + e->Graphics->DrawString( + "Let's draw a string to a rectangle and go a little " + "overboard on the size of the string that we place " + "inside of it", + gcnew Drawing::Font(gcnew FontFamily("Arial"), 13), + Brushes::Black, Drawing::RectangleF(20.0, 40.0, 250.0, 80.0), + stringformat); + } + }; +} + diff --git a/Chapter11/DownwardStringRect/Form1.resx b/Chapter11/DownwardStringRect/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/DownwardStringRect/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/DownwardStringRect/stdafx.cpp b/Chapter11/DownwardStringRect/stdafx.cpp new file mode 100644 index 0000000..2580201 --- /dev/null +++ b/Chapter11/DownwardStringRect/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// DownwardStringRect.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/DownwardStringRect/stdafx.h b/Chapter11/DownwardStringRect/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/DownwardStringRect/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/DrawImageEx/AssemblyInfo.cpp b/Chapter11/DrawImageEx/AssemblyInfo.cpp new file mode 100644 index 0000000..2f00614 --- /dev/null +++ b/Chapter11/DrawImageEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("DrawImageEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("DrawImageEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/DrawImageEx/DrawImageEx.cpp b/Chapter11/DrawImageEx/DrawImageEx.cpp new file mode 100644 index 0000000..c0374e0 --- /dev/null +++ b/Chapter11/DrawImageEx/DrawImageEx.cpp @@ -0,0 +1,16 @@ +// DrawImageEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace DrawImageEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/DrawImageEx/DrawImageEx.vcproj b/Chapter11/DrawImageEx/DrawImageEx.vcproj new file mode 100644 index 0000000..4b76350 --- /dev/null +++ b/Chapter11/DrawImageEx/DrawImageEx.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/DrawImageEx/Form1.h b/Chapter11/DrawImageEx/Form1.h new file mode 100644 index 0000000..cf386f9 --- /dev/null +++ b/Chapter11/DrawImageEx/Form1.h @@ -0,0 +1,57 @@ +#pragma once + +namespace DrawImageEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Draw Image"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + Image^ img = Image::FromFile("Images\\CLICppCover.gif"); + e->Graphics->DrawImage(img, 0, 0, img->Width*2, img->Height*2); + } + }; +} \ No newline at end of file diff --git a/Chapter11/DrawImageEx/Form1.resx b/Chapter11/DrawImageEx/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/DrawImageEx/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/DrawImageEx/Images/CLICppCover.gif b/Chapter11/DrawImageEx/Images/CLICppCover.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9c6832627f8d753f565cc5c193f60f4fb5173d9 GIT binary patch literal 6345 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 literal 0 HcmV?d00001 diff --git a/Chapter11/DrawImageEx/stdafx.cpp b/Chapter11/DrawImageEx/stdafx.cpp new file mode 100644 index 0000000..85cbb3c --- /dev/null +++ b/Chapter11/DrawImageEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// DrawImageEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/DrawImageEx/stdafx.h b/Chapter11/DrawImageEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/DrawImageEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/DrawingLines/AssemblyInfo.cpp b/Chapter11/DrawingLines/AssemblyInfo.cpp new file mode 100644 index 0000000..3e7d657 --- /dev/null +++ b/Chapter11/DrawingLines/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("DrawingLines")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("DrawingLines")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/DrawingLines/DrawingLines.cpp b/Chapter11/DrawingLines/DrawingLines.cpp new file mode 100644 index 0000000..d306bf3 --- /dev/null +++ b/Chapter11/DrawingLines/DrawingLines.cpp @@ -0,0 +1,16 @@ +// DrawingLines.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace DrawingLines; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/DrawingLines/DrawingLines.vcproj b/Chapter11/DrawingLines/DrawingLines.vcproj new file mode 100644 index 0000000..e17f1c9 --- /dev/null +++ b/Chapter11/DrawingLines/DrawingLines.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/DrawingLines/Form1.h b/Chapter11/DrawingLines/Form1.h new file mode 100644 index 0000000..0321cd6 --- /dev/null +++ b/Chapter11/DrawingLines/Form1.h @@ -0,0 +1,90 @@ +#pragma once + +namespace DrawingLines +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + using namespace System::Drawing::Drawing2D; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + pen = gcnew array(5); + + // a one unit width black pen + pen[0] = Pens::Black; + + // a one unit with purple pen broken with dashes + pen[1] = gcnew Pen(Color::Purple); + pen[1]->DashStyle = DashStyle::Dash; + + // a 4 unit width chocolate pen + pen[2] = gcnew Pen(Color::Chocolate, 4); + + // A 8 width royalblue pen made of three lines narrow wide narrow + pen[3] = gcnew Pen(Color::RoyalBlue, 10); + array^ cArray = gcnew array { + 0.0f, 0.1f, 0.3f, 0.7f, 0.9f, 1.0f + }; + pen[3]->CompoundArray = cArray; + + // a 5 width tomato pen with dimond start and round end anchors + pen[4] = gcnew Pen(Color::Tomato, 5); + pen[4]->StartCap = LineCap::DiamondAnchor; + pen[4]->EndCap = LineCap::RoundAnchor; + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + array^ pen; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Drawing Some lines"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + Random ^rand = gcnew Random(); + + for (int i = 0; i < 10; i++) + { + e->Graphics->DrawLine(pen[i%5], rand->Next(0,299), + rand->Next(0,299), rand->Next(0,299), rand->Next(0,299)); + } + } + }; +} + diff --git a/Chapter11/DrawingLines/Form1.resx b/Chapter11/DrawingLines/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/DrawingLines/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/DrawingLines/stdafx.cpp b/Chapter11/DrawingLines/stdafx.cpp new file mode 100644 index 0000000..43d931c --- /dev/null +++ b/Chapter11/DrawingLines/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// DrawingLines.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/DrawingLines/stdafx.h b/Chapter11/DrawingLines/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/DrawingLines/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/FontsGalore/AssemblyInfo.cpp b/Chapter11/FontsGalore/AssemblyInfo.cpp new file mode 100644 index 0000000..9bb6fc9 --- /dev/null +++ b/Chapter11/FontsGalore/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("FontsGalore")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("FontsGalore")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/FontsGalore/FontsGalore.cpp b/Chapter11/FontsGalore/FontsGalore.cpp new file mode 100644 index 0000000..4f21424 --- /dev/null +++ b/Chapter11/FontsGalore/FontsGalore.cpp @@ -0,0 +1,16 @@ +// FontsGalore.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace FontsGalore; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/FontsGalore/FontsGalore.vcproj b/Chapter11/FontsGalore/FontsGalore.vcproj new file mode 100644 index 0000000..178b5a1 --- /dev/null +++ b/Chapter11/FontsGalore/FontsGalore.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/FontsGalore/Form1.h b/Chapter11/FontsGalore/Form1.h new file mode 100644 index 0000000..0143df2 --- /dev/null +++ b/Chapter11/FontsGalore/Form1.h @@ -0,0 +1,121 @@ +#pragma once + +namespace FontsGalore +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + using namespace System::Drawing::Text; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + fonts = gcnew array(10); + fontstr = gcnew array(10); + + // Used to generate random fonts + array^ sizes = gcnew array { + 10.0, 12.5, 16.0 + }; + + array^ fontstyles = gcnew array { + FontStyle::Regular, FontStyle::Bold, + FontStyle::Italic, + (FontStyle)(FontStyle::Underline|FontStyle::Bold|FontStyle::Italic) + }; + + array^ units = gcnew array { + GraphicsUnit::Point, GraphicsUnit::Pixel + }; + + // Get all fonts on computer + InstalledFontCollection ^availFonts = + gcnew InstalledFontCollection(); + + array^ fontfamilies = availFonts->Families; + + Random ^rand = gcnew Random(); + int ff, s, fs, u; + + for (int i = 0; i < fonts->Length; i++) + { + s = rand->Next(0,3); + fs = rand->Next(0,3); + u = rand->Next(0,2); + + // Not all fonts support every style + do { + ff = rand->Next(0,fontfamilies->Length); + } + while (!fontfamilies[ff]->IsStyleAvailable( + (FontStyle)fontstyles[fs])); + + // Display string of font + fontstr[i] = String::Format("{0} {1} {2}", + fontfamilies[ff]->Name, + sizes[s], + String::Concat(fontstyles[fs], " ", + units[u])); + + // Create the font + fonts[i] = gcnew Drawing::Font(fontfamilies[ff], sizes[s], + (FontStyle)fontstyles[fs], + (GraphicsUnit)units[u]); + } + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + array^ fonts; + array^ fontstr; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Many Fonts"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + float lineloc = 0; + for (int i = 0; i < fonts->Length; i++) + { + // Display font + e->Graphics->DrawString(fontstr[i], fonts[i], Brushes::Black, + 10, lineloc); + + // Calculate the top of the next line + lineloc += fonts[i]->Height; + } + } + }; +} \ No newline at end of file diff --git a/Chapter11/FontsGalore/Form1.resx b/Chapter11/FontsGalore/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/FontsGalore/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/FontsGalore/stdafx.cpp b/Chapter11/FontsGalore/stdafx.cpp new file mode 100644 index 0000000..335960a --- /dev/null +++ b/Chapter11/FontsGalore/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// FontsGalore.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/FontsGalore/stdafx.h b/Chapter11/FontsGalore/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/FontsGalore/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/HappyFace/AssemblyInfo.cpp b/Chapter11/HappyFace/AssemblyInfo.cpp new file mode 100644 index 0000000..9a42379 --- /dev/null +++ b/Chapter11/HappyFace/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("HappyFace")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("HappyFace")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/HappyFace/Form1.h b/Chapter11/HappyFace/Form1.h new file mode 100644 index 0000000..7f5e8de --- /dev/null +++ b/Chapter11/HappyFace/Form1.h @@ -0,0 +1,80 @@ +#pragma once + +namespace HappyFace +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(300, 300); + this->Name = L"Form1"; + this->Text = L"Happy Face"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + Graphics^ g = e->Graphics; + Pen^ b4pen = gcnew Pen(Color::Black, 4); + + // Head + Rectangle rect = Drawing::Rectangle(25, 25, 250, 250); + g->FillEllipse(Brushes::Yellow, rect); + g->DrawEllipse(b4pen, rect); + + // Mouth + g->FillPie(Brushes::White, 100, 175, 100, 50, 0, 180); + g->DrawPie(b4pen, 100, 175, 100, 50, 0, 180); + + // Left Eye + rect = Drawing::Rectangle(100, 100, 25, 25); + g->FillEllipse(Brushes::White, rect); + g->DrawEllipse(b4pen, rect); + + // Right Eye + rect = Drawing::Rectangle(175, 100, 25, 25); + g->FillEllipse(Brushes::White, rect); + g->DrawEllipse(b4pen, rect); + + // Get rid of pen Created + delete b4pen; + } + }; +} \ No newline at end of file diff --git a/Chapter11/HappyFace/Form1.resx b/Chapter11/HappyFace/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/HappyFace/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/HappyFace/HappyFace.cpp b/Chapter11/HappyFace/HappyFace.cpp new file mode 100644 index 0000000..d9c0b5c --- /dev/null +++ b/Chapter11/HappyFace/HappyFace.cpp @@ -0,0 +1,16 @@ +// HappyFace.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace HappyFace; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/HappyFace/HappyFace.vcproj b/Chapter11/HappyFace/HappyFace.vcproj new file mode 100644 index 0000000..ec3aa07 --- /dev/null +++ b/Chapter11/HappyFace/HappyFace.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/HappyFace/stdafx.cpp b/Chapter11/HappyFace/stdafx.cpp new file mode 100644 index 0000000..ea6f730 --- /dev/null +++ b/Chapter11/HappyFace/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// HappyFace.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/HappyFace/stdafx.h b/Chapter11/HappyFace/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/HappyFace/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/HelloGDI/AssemblyInfo.cpp b/Chapter11/HelloGDI/AssemblyInfo.cpp new file mode 100644 index 0000000..4c3ccc3 --- /dev/null +++ b/Chapter11/HelloGDI/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("HelloGDI")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("HelloGDI")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/HelloGDI/Form1.h b/Chapter11/HelloGDI/Form1.h new file mode 100644 index 0000000..4b58dbc --- /dev/null +++ b/Chapter11/HelloGDI/Form1.h @@ -0,0 +1,58 @@ +#pragma once + +namespace HelloGDI +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Hello GDI+"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + + } +#pragma endregion + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + Graphics ^g = e->Graphics; + g->DrawString("Hello World!", + gcnew Drawing::Font("Arial", 16), Brushes::Black, 75.0, 110.0); + } + }; +} + diff --git a/Chapter11/HelloGDI/Form1.resx b/Chapter11/HelloGDI/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/HelloGDI/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/HelloGDI/HelloGDI.cpp b/Chapter11/HelloGDI/HelloGDI.cpp new file mode 100644 index 0000000..2ca9456 --- /dev/null +++ b/Chapter11/HelloGDI/HelloGDI.cpp @@ -0,0 +1,16 @@ +// HelloGDI.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace HelloGDI; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/HelloGDI/HelloGDI.vcproj b/Chapter11/HelloGDI/HelloGDI.vcproj new file mode 100644 index 0000000..0802308 --- /dev/null +++ b/Chapter11/HelloGDI/HelloGDI.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/HelloGDI/resource.h b/Chapter11/HelloGDI/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter11/HelloGDI/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter11/HelloGDI/stdafx.cpp b/Chapter11/HelloGDI/stdafx.cpp new file mode 100644 index 0000000..a1d330d --- /dev/null +++ b/Chapter11/HelloGDI/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// HelloGDI.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/HelloGDI/stdafx.h b/Chapter11/HelloGDI/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/HelloGDI/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/HelloGDI_OnPaint/AssemblyInfo.cpp b/Chapter11/HelloGDI_OnPaint/AssemblyInfo.cpp new file mode 100644 index 0000000..3382a8b --- /dev/null +++ b/Chapter11/HelloGDI_OnPaint/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("HelloGDI_OnPaint")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("HelloGDI_OnPaint")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/HelloGDI_OnPaint/Form1.h b/Chapter11/HelloGDI_OnPaint/Form1.h new file mode 100644 index 0000000..dda9a1e --- /dev/null +++ b/Chapter11/HelloGDI_OnPaint/Form1.h @@ -0,0 +1,55 @@ +#pragma once + + +namespace HelloGDI_OnPaint +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->components = gcnew System::ComponentModel::Container(); + this->Size = System::Drawing::Size(300,300); + this->Text = L"Hello GDI+"; + this->Padding = System::Windows::Forms::Padding(0); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + } +#pragma endregion + + protected: + virtual void OnPaint(System::Windows::Forms::PaintEventArgs ^e) override + { + Form::OnPaint(e); + + Graphics ^g = e->Graphics; + g->DrawString("Hello World!", + gcnew Drawing::Font("Arial", 16), Brushes::Black, 75.0, 110.0); + } + }; +} + diff --git a/Chapter11/HelloGDI_OnPaint/Form1.resX b/Chapter11/HelloGDI_OnPaint/Form1.resX new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/HelloGDI_OnPaint/Form1.resX @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/HelloGDI_OnPaint/HelloGDI_OnPaint.cpp b/Chapter11/HelloGDI_OnPaint/HelloGDI_OnPaint.cpp new file mode 100644 index 0000000..dbb0eb0 --- /dev/null +++ b/Chapter11/HelloGDI_OnPaint/HelloGDI_OnPaint.cpp @@ -0,0 +1,16 @@ +// HelloGDI_OnPaint.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace HelloGDI_OnPaint; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/HelloGDI_OnPaint/HelloGDI_OnPaint.vcproj b/Chapter11/HelloGDI_OnPaint/HelloGDI_OnPaint.vcproj new file mode 100644 index 0000000..d98210e --- /dev/null +++ b/Chapter11/HelloGDI_OnPaint/HelloGDI_OnPaint.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/HelloGDI_OnPaint/stdafx.cpp b/Chapter11/HelloGDI_OnPaint/stdafx.cpp new file mode 100644 index 0000000..67c8a92 --- /dev/null +++ b/Chapter11/HelloGDI_OnPaint/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// HelloGDI_OnPaint.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/HelloGDI_OnPaint/stdafx.h b/Chapter11/HelloGDI_OnPaint/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/HelloGDI_OnPaint/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/InterOrUnion/AssemblyInfo.cpp b/Chapter11/InterOrUnion/AssemblyInfo.cpp new file mode 100644 index 0000000..e7f3ad2 --- /dev/null +++ b/Chapter11/InterOrUnion/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("InterOrUnion")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("InterOrUnion")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/InterOrUnion/Form1.h b/Chapter11/InterOrUnion/Form1.h new file mode 100644 index 0000000..6ea4121 --- /dev/null +++ b/Chapter11/InterOrUnion/Form1.h @@ -0,0 +1,89 @@ +#pragma once + +namespace InterOrUnion +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + // Build the rectangles from points and size + Drawing::Point point1 = Drawing::Point(25,25); + Drawing::Point point2 = Drawing::Point(100,100); + Drawing::Size size = Drawing::Size(200, 150); + rect1 = Drawing::Rectangle(point1, size); + rect2 = Drawing::Rectangle(point2, size); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + + // intersecting and unions rectangles + Drawing::Rectangle rect1; + Drawing::Rectangle rect2; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(330, 300); + this->Name = L"Form1"; + this->Text = L"Click in Window"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->MouseDown += + gcnew System::Windows::Forms::MouseEventHandler(this, + &Form1::Form1_MouseDown); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + // Draw a couple of rectangles + e->Graphics->DrawRectangle(Pens::Black, rect1); + e->Graphics->DrawRectangle(Pens::Black, rect2); + } + + private: + System::Void Form1_MouseDown(System::Object^ sender, + System::Windows::Forms::MouseEventArgs^ e) + { + // build a point from x,y coords of mouse click + Point p = Point(e->X, e->Y); + + // did we click in the intersection? + if (Rectangle::Intersect(rect1, rect2).Contains(p)) + Text = "Intersection and Union"; + // did we click in the union? + else if (Rectangle::Union(rect1, rect2).Contains(p)) + Text = "Union"; + // did we miss altogether + else + Text = "Outside of Both"; + } + }; +} \ No newline at end of file diff --git a/Chapter11/InterOrUnion/Form1.resx b/Chapter11/InterOrUnion/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/InterOrUnion/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/InterOrUnion/InterOrUnion.cpp b/Chapter11/InterOrUnion/InterOrUnion.cpp new file mode 100644 index 0000000..87d20c2 --- /dev/null +++ b/Chapter11/InterOrUnion/InterOrUnion.cpp @@ -0,0 +1,16 @@ +// InterOrUnion.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace InterOrUnion; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/InterOrUnion/InterOrUnion.vcproj b/Chapter11/InterOrUnion/InterOrUnion.vcproj new file mode 100644 index 0000000..49288ee --- /dev/null +++ b/Chapter11/InterOrUnion/InterOrUnion.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/InterOrUnion/stdafx.cpp b/Chapter11/InterOrUnion/stdafx.cpp new file mode 100644 index 0000000..dd8556c --- /dev/null +++ b/Chapter11/InterOrUnion/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// InterOrUnion.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/InterOrUnion/stdafx.h b/Chapter11/InterOrUnion/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/InterOrUnion/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/NewUnitsOrigin/AssemblyInfo.cpp b/Chapter11/NewUnitsOrigin/AssemblyInfo.cpp new file mode 100644 index 0000000..98064fa --- /dev/null +++ b/Chapter11/NewUnitsOrigin/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("NewUnitsOrigin")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("NewUnitsOrigin")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/NewUnitsOrigin/Form1.h b/Chapter11/NewUnitsOrigin/Form1.h new file mode 100644 index 0000000..eb00041 --- /dev/null +++ b/Chapter11/NewUnitsOrigin/Form1.h @@ -0,0 +1,65 @@ +#pragma once + + +namespace NewUnitsOrigin { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(341, 273); + this->Name = L"Form1"; + this->Text = L"Millimeter Unit of measure Origin (20,20)"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + Graphics ^g = e->Graphics; + + // Draw a rectangle before unit of measure and origin change + g->DrawRectangle(Pens::Black, 5, 5, 50, 20); + + // Draw same rectangle after change + g->PageUnit = GraphicsUnit::Millimeter; + g->TranslateTransform(20,20); + g->DrawRectangle(Pens::Black, 5, 5, 50, 20); + } + }; +} + diff --git a/Chapter11/NewUnitsOrigin/Form1.resx b/Chapter11/NewUnitsOrigin/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/NewUnitsOrigin/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/NewUnitsOrigin/NewUnitsOrigin.cpp b/Chapter11/NewUnitsOrigin/NewUnitsOrigin.cpp new file mode 100644 index 0000000..96f0c2c --- /dev/null +++ b/Chapter11/NewUnitsOrigin/NewUnitsOrigin.cpp @@ -0,0 +1,16 @@ +// NewUnitsOrigin.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace NewUnitsOrigin; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/NewUnitsOrigin/NewUnitsOrigin.vcproj b/Chapter11/NewUnitsOrigin/NewUnitsOrigin.vcproj new file mode 100644 index 0000000..cce472a --- /dev/null +++ b/Chapter11/NewUnitsOrigin/NewUnitsOrigin.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/NewUnitsOrigin/stdafx.cpp b/Chapter11/NewUnitsOrigin/stdafx.cpp new file mode 100644 index 0000000..2431710 --- /dev/null +++ b/Chapter11/NewUnitsOrigin/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// NewUnitsOrigin.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/NewUnitsOrigin/stdafx.h b/Chapter11/NewUnitsOrigin/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/NewUnitsOrigin/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/OnPaintWhere/AssemblyInfo.cpp b/Chapter11/OnPaintWhere/AssemblyInfo.cpp new file mode 100644 index 0000000..9f3dd0b --- /dev/null +++ b/Chapter11/OnPaintWhere/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("OnPaintWhere")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("OnPaintWhere")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/OnPaintWhere/Form1.h b/Chapter11/OnPaintWhere/Form1.h new file mode 100644 index 0000000..6e0f7ae --- /dev/null +++ b/Chapter11/OnPaintWhere/Form1.h @@ -0,0 +1,68 @@ +#pragma once + +namespace OnPaintWhere +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Hello GDI+"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + } +#pragma endregion + + protected: + virtual void OnPaint(System::Windows::Forms::PaintEventArgs ^e) override + { +// Form::OnPaint(e); + + e->Graphics->DrawString("Hello GDI+", + gcnew Drawing::Font("Arial", 16), Brushes::Black, 75.0, 110.0); + + Form::OnPaint(e); + } + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + e->Graphics->DrawString("Hello GDI+", + gcnew Drawing::Font("Arial", 16), Brushes::Purple, 75.0, 110.0); + } + }; +} + diff --git a/Chapter11/OnPaintWhere/Form1.resx b/Chapter11/OnPaintWhere/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/OnPaintWhere/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/OnPaintWhere/OnPaintWhere.cpp b/Chapter11/OnPaintWhere/OnPaintWhere.cpp new file mode 100644 index 0000000..a413b82 --- /dev/null +++ b/Chapter11/OnPaintWhere/OnPaintWhere.cpp @@ -0,0 +1,16 @@ +// OnPaintWhere.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace OnPaintWhere; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/OnPaintWhere/OnPaintWhere.vcproj b/Chapter11/OnPaintWhere/OnPaintWhere.vcproj new file mode 100644 index 0000000..3f61551 --- /dev/null +++ b/Chapter11/OnPaintWhere/OnPaintWhere.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/OnPaintWhere/stdafx.cpp b/Chapter11/OnPaintWhere/stdafx.cpp new file mode 100644 index 0000000..0d99dc3 --- /dev/null +++ b/Chapter11/OnPaintWhere/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// OnPaintWhere.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/OnPaintWhere/stdafx.h b/Chapter11/OnPaintWhere/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/OnPaintWhere/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/OptimizedHappyFace/AssemblyInfo.cpp b/Chapter11/OptimizedHappyFace/AssemblyInfo.cpp new file mode 100644 index 0000000..556b8ba --- /dev/null +++ b/Chapter11/OptimizedHappyFace/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("OptimizedHappyFace")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("OptimizedHappyFace")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/OptimizedHappyFace/Form1.h b/Chapter11/OptimizedHappyFace/Form1.h new file mode 100644 index 0000000..12c10de --- /dev/null +++ b/Chapter11/OptimizedHappyFace/Form1.h @@ -0,0 +1,100 @@ +#pragma once + +namespace OptimizedHappyFace +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + Head = Drawing::Rectangle(125, 25, 250, 250); + Mouth = Drawing::Rectangle(200, 175, 100, 50); + LEye = Drawing::Rectangle(200, 100, 25, 25); + REye = Drawing::Rectangle(275, 100, 25, 25); + + b4pen = gcnew Pen(Color::Black, 4); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + + System::Drawing::Rectangle Head; + System::Drawing::Rectangle Mouth; + System::Drawing::Rectangle LEye; + System::Drawing::Rectangle REye; + Pen^ b4pen; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + + this->AutoScrollMinSize = System::Drawing::Size(400,400); + + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Optimized Happy Face"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + Graphics^ g = e->Graphics; + + Drawing::Rectangle ClipRect = e->ClipRectangle; + ClipRect.Offset(-AutoScrollPosition.X, -AutoScrollPosition.Y); + + g->TranslateTransform((float)AutoScrollPosition.X, + (float)AutoScrollPosition.Y); + + if (!(Rectangle::Intersect(ClipRect, Head)).IsEmpty) + { + g->FillEllipse(Brushes::Yellow, Head); + g->DrawEllipse(b4pen, Head); + + if (!(Rectangle::Intersect(ClipRect, Mouth)).IsEmpty) + { + g->FillPie(Brushes::White, Mouth, 0, 180); + g->DrawPie(b4pen, Mouth, 0, 180); + } + if (!(Rectangle::Intersect(ClipRect, LEye)).IsEmpty) + { + g->FillEllipse(Brushes::White, LEye); + g->DrawEllipse(b4pen, LEye); + } + if (!(Rectangle::Intersect(ClipRect, REye)).IsEmpty) + { + g->FillEllipse(Brushes::White, REye); + g->DrawEllipse(b4pen, REye); + } + } + } + }; +} + diff --git a/Chapter11/OptimizedHappyFace/Form1.resx b/Chapter11/OptimizedHappyFace/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/OptimizedHappyFace/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/OptimizedHappyFace/OptimizedHappyFace.cpp b/Chapter11/OptimizedHappyFace/OptimizedHappyFace.cpp new file mode 100644 index 0000000..8494607 --- /dev/null +++ b/Chapter11/OptimizedHappyFace/OptimizedHappyFace.cpp @@ -0,0 +1,16 @@ +// OptimizedHappyFace.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace OptimizedHappyFace; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/OptimizedHappyFace/OptimizedHappyFace.vcproj b/Chapter11/OptimizedHappyFace/OptimizedHappyFace.vcproj new file mode 100644 index 0000000..489a9d2 --- /dev/null +++ b/Chapter11/OptimizedHappyFace/OptimizedHappyFace.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/OptimizedHappyFace/stdafx.cpp b/Chapter11/OptimizedHappyFace/stdafx.cpp new file mode 100644 index 0000000..aa4d3ea --- /dev/null +++ b/Chapter11/OptimizedHappyFace/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// OptimizedHappyFace.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/OptimizedHappyFace/stdafx.h b/Chapter11/OptimizedHappyFace/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/OptimizedHappyFace/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/PrintHappyFace/AssemblyInfo.cpp b/Chapter11/PrintHappyFace/AssemblyInfo.cpp new file mode 100644 index 0000000..7cbb247 --- /dev/null +++ b/Chapter11/PrintHappyFace/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("PrintHappyFace")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("PrintHappyFace")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/PrintHappyFace/Form1.h b/Chapter11/PrintHappyFace/Form1.h new file mode 100644 index 0000000..4cca86a --- /dev/null +++ b/Chapter11/PrintHappyFace/Form1.h @@ -0,0 +1,115 @@ +#pragma once + +namespace PrintHappyFace +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Drawing::Printing::PrintDocument^ printDocument; + System::Windows::Forms::PrintDialog^ printDialog; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->printDocument = + (gcnew System::Drawing::Printing::PrintDocument()); + this->printDialog = (gcnew System::Windows::Forms::PrintDialog()); + this->SuspendLayout(); + // + // printDocument + // + this->printDocument->PrintPage += + gcnew System::Drawing::Printing::PrintPageEventHandler(this, + &Form1::printDocument_PrintPage); + // + // printDialog + // + this->printDialog->Document = this->printDocument; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(300, 300); + this->Name = L"Form1"; + this->Text = L"Click to Print"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->Click += + gcnew System::EventHandler(this, &Form1::Form1_Click); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) + { + // Display Print dialog when mouse pressed + if (printDialog->ShowDialog() == Windows::Forms::DialogResult::OK) + { + printDocument->Print(); + } + } + + System::Void printDocument_PrintPage(System::Object^ sender, + System::Drawing::Printing::PrintPageEventArgs^ e) + { + CreateHappyFace(e->Graphics); //Same call as Form1_Paint + e->HasMorePages = false; + } + + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + CreateHappyFace(e->Graphics);//Same call as printDocument_PrintPage + } + + // Generic Happy Face Creator + void CreateHappyFace(Graphics ^g) + { + Pen^ b4pen = gcnew Pen(Color::Black, 4); + + Rectangle rect = Drawing::Rectangle(25, 25, 250, 250); + g->FillEllipse(Brushes::Yellow, rect); + g->DrawEllipse(b4pen, rect); + + g->FillPie(Brushes::White, 100, 175, 100, 50, 0, 180); + g->DrawPie(b4pen, 100, 175, 100, 50, 0, 180); + + rect = Drawing::Rectangle(100, 100, 25, 25); + g->FillEllipse(Brushes::White, rect); + g->DrawEllipse(b4pen, rect); + + rect = Drawing::Rectangle(175, 100, 25, 25); + g->FillEllipse(Brushes::White, rect); + g->DrawEllipse(b4pen, rect); + + delete b4pen; + } + }; +} + diff --git a/Chapter11/PrintHappyFace/Form1.resx b/Chapter11/PrintHappyFace/Form1.resx new file mode 100644 index 0000000..5995a90 --- /dev/null +++ b/Chapter11/PrintHappyFace/Form1.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 148, 17 + + \ No newline at end of file diff --git a/Chapter11/PrintHappyFace/PrintHappyFace.cpp b/Chapter11/PrintHappyFace/PrintHappyFace.cpp new file mode 100644 index 0000000..04b5e99 --- /dev/null +++ b/Chapter11/PrintHappyFace/PrintHappyFace.cpp @@ -0,0 +1,16 @@ +// PrintHappyFace.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace PrintHappyFace; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/PrintHappyFace/PrintHappyFace.vcproj b/Chapter11/PrintHappyFace/PrintHappyFace.vcproj new file mode 100644 index 0000000..60f3138 --- /dev/null +++ b/Chapter11/PrintHappyFace/PrintHappyFace.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/PrintHappyFace/stdafx.cpp b/Chapter11/PrintHappyFace/stdafx.cpp new file mode 100644 index 0000000..039160b --- /dev/null +++ b/Chapter11/PrintHappyFace/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// PrintHappyFace.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/PrintHappyFace/stdafx.h b/Chapter11/PrintHappyFace/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/PrintHappyFace/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/RegionEx/AssemblyInfo.cpp b/Chapter11/RegionEx/AssemblyInfo.cpp new file mode 100644 index 0000000..9d00177 --- /dev/null +++ b/Chapter11/RegionEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("RegionEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("RegionEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/RegionEx/Form1.h b/Chapter11/RegionEx/Form1.h new file mode 100644 index 0000000..638e64b --- /dev/null +++ b/Chapter11/RegionEx/Form1.h @@ -0,0 +1,66 @@ +#pragma once + +namespace RegionEx { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + Drawing::Point point1 = Drawing::Point(25,25); + Drawing::Point point2 = Drawing::Point(100,100); + Drawing::Size size = Drawing::Size(200, 150); + Rectangle rect1 = Drawing::Rectangle(point1, size); + Rectangle rect2 = Drawing::Rectangle(point2, size); + + region = gcnew Drawing::Region(rect1); + region->Xor(rect2); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + Drawing::Region ^region; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(322, 273); + this->Name = L"Form1"; + this->Text = L"Filling A Region"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + e->Graphics->FillRegion(Brushes::Blue, region); + } + }; +} + diff --git a/Chapter11/RegionEx/Form1.resx b/Chapter11/RegionEx/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/RegionEx/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/RegionEx/RegionEx.cpp b/Chapter11/RegionEx/RegionEx.cpp new file mode 100644 index 0000000..6917c40 --- /dev/null +++ b/Chapter11/RegionEx/RegionEx.cpp @@ -0,0 +1,16 @@ +// RegionEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace RegionEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/RegionEx/RegionEx.vcproj b/Chapter11/RegionEx/RegionEx.vcproj new file mode 100644 index 0000000..e6d6509 --- /dev/null +++ b/Chapter11/RegionEx/RegionEx.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/RegionEx/stdafx.cpp b/Chapter11/RegionEx/stdafx.cpp new file mode 100644 index 0000000..436cd29 --- /dev/null +++ b/Chapter11/RegionEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// RegionEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/RegionEx/stdafx.h b/Chapter11/RegionEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/RegionEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/ScrollingHappyFace/AssemblyInfo.cpp b/Chapter11/ScrollingHappyFace/AssemblyInfo.cpp new file mode 100644 index 0000000..7b4c675 --- /dev/null +++ b/Chapter11/ScrollingHappyFace/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ScrollingHappyFace")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ScrollingHappyFace")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/ScrollingHappyFace/Form1.h b/Chapter11/ScrollingHappyFace/Form1.h new file mode 100644 index 0000000..93da792 --- /dev/null +++ b/Chapter11/ScrollingHappyFace/Form1.h @@ -0,0 +1,83 @@ +#pragma once + +namespace ScrollingHappyFace +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + + this->AutoScrollMinSize = System::Drawing::Size(400,400); + + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Scrolling Happy Face"; + this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::Form1_Paint); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + Graphics^ g = e->Graphics; + g->TranslateTransform((float)AutoScrollPosition.X, + (float)AutoScrollPosition.Y); + + Pen^ b4pen = gcnew Pen(Color::Black, 4); + + // Head + Rectangle rect = Drawing::Rectangle(25, 25, 250, 250); + g->FillEllipse(Brushes::Yellow, rect); + g->DrawEllipse(b4pen, rect); + + // Mouth + g->FillPie(Brushes::White, 100, 175, 100, 50, 0, 180); + g->DrawPie(b4pen, 100, 175, 100, 50, 0, 180); + + // Left Eye + rect = Drawing::Rectangle(100, 100, 25, 25); + g->FillEllipse(Brushes::White, rect); + g->DrawEllipse(b4pen, rect); + + // Right Eye + rect = Drawing::Rectangle(175, 100, 25, 25); + g->FillEllipse(Brushes::White, rect); + g->DrawEllipse(b4pen, rect); + + // Get rid of pen Created + delete b4pen; + } + }; +} \ No newline at end of file diff --git a/Chapter11/ScrollingHappyFace/Form1.resx b/Chapter11/ScrollingHappyFace/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/ScrollingHappyFace/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/ScrollingHappyFace/ScrollingHappyFace.cpp b/Chapter11/ScrollingHappyFace/ScrollingHappyFace.cpp new file mode 100644 index 0000000..5e5ed11 --- /dev/null +++ b/Chapter11/ScrollingHappyFace/ScrollingHappyFace.cpp @@ -0,0 +1,16 @@ +// ScrollingHappyFace.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace ScrollingHappyFace; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/ScrollingHappyFace/ScrollingHappyFace.vcproj b/Chapter11/ScrollingHappyFace/ScrollingHappyFace.vcproj new file mode 100644 index 0000000..cc45ecc --- /dev/null +++ b/Chapter11/ScrollingHappyFace/ScrollingHappyFace.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/ScrollingHappyFace/stdafx.cpp b/Chapter11/ScrollingHappyFace/stdafx.cpp new file mode 100644 index 0000000..9d5103c --- /dev/null +++ b/Chapter11/ScrollingHappyFace/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ScrollingHappyFace.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/ScrollingHappyFace/stdafx.h b/Chapter11/ScrollingHappyFace/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/ScrollingHappyFace/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/SingleBuffering/AssemblyInfo.cpp b/Chapter11/SingleBuffering/AssemblyInfo.cpp new file mode 100644 index 0000000..895a4b6 --- /dev/null +++ b/Chapter11/SingleBuffering/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SingleBuffering")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SingleBuffering")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/SingleBuffering/Form1.h b/Chapter11/SingleBuffering/Form1.h new file mode 100644 index 0000000..47f8f5a --- /dev/null +++ b/Chapter11/SingleBuffering/Form1.h @@ -0,0 +1,110 @@ +#pragma once + + +namespace SingleBuffering +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + X = -250; // Preset to be just left of window + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::Timer^ timer1; + System::ComponentModel::IContainer^ components; + + float X; // Actual x coordinate of Happy face + + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->components = (gcnew System::ComponentModel::Container()); + this->timer1 = + (gcnew System::Windows::Forms::Timer(this->components)); + this->SuspendLayout(); + // + // timer1 + // + this->timer1->Enabled = true; + this->timer1->Interval = 10; + this->timer1->Tick += + gcnew System::EventHandler(this, &Form1::timer1_Tick); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(500, 300); + this->Name = L"Form1"; + this->Text = L"Form1"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + + } +#pragma endregion + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + Graphics^ g = e->Graphics; + + // Move image at end of line start from beginning + if (X < ClientRectangle.Width) + X += 1.0; + else + X = -250.0; + + g->TranslateTransform(X, 25.0); + + // redraw images from scratch + Pen^ b4pen = gcnew Pen(Color::Black, 4); + + Drawing::Rectangle Head = Drawing::Rectangle(0, 0, 250, 250); + g->FillEllipse(Brushes::Yellow, Head); + g->DrawEllipse(b4pen, Head); + + Drawing::Rectangle Mouth = Drawing::Rectangle(75, 150, 100, 50); + g->FillPie(Brushes::White, Mouth,0,180); + g->DrawPie(b4pen, Mouth, 0, 180); + + Drawing::Rectangle LEye = Drawing::Rectangle(75, 75, 25, 25); + g->FillEllipse(Brushes::White, LEye); + g->DrawEllipse(b4pen, LEye); + + Drawing::Rectangle REye = Drawing::Rectangle(150, 75, 25, 25); + g->FillEllipse(Brushes::White, REye); + g->DrawEllipse(b4pen, REye); + + delete b4pen; + } + + System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) + { + // Move the image + Invalidate(); + } + }; +} + diff --git a/Chapter11/SingleBuffering/Form1.resx b/Chapter11/SingleBuffering/Form1.resx new file mode 100644 index 0000000..886d0de --- /dev/null +++ b/Chapter11/SingleBuffering/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter11/SingleBuffering/SingleBuffering.cpp b/Chapter11/SingleBuffering/SingleBuffering.cpp new file mode 100644 index 0000000..761b334 --- /dev/null +++ b/Chapter11/SingleBuffering/SingleBuffering.cpp @@ -0,0 +1,16 @@ +// SingleBuffering.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace SingleBuffering; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/SingleBuffering/SingleBuffering.vcproj b/Chapter11/SingleBuffering/SingleBuffering.vcproj new file mode 100644 index 0000000..d69c132 --- /dev/null +++ b/Chapter11/SingleBuffering/SingleBuffering.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/SingleBuffering/stdafx.cpp b/Chapter11/SingleBuffering/stdafx.cpp new file mode 100644 index 0000000..2fc42b5 --- /dev/null +++ b/Chapter11/SingleBuffering/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SingleBuffering.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/SingleBuffering/stdafx.h b/Chapter11/SingleBuffering/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/SingleBuffering/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/StringRect/AssemblyInfo.cpp b/Chapter11/StringRect/AssemblyInfo.cpp new file mode 100644 index 0000000..f30ca73 --- /dev/null +++ b/Chapter11/StringRect/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("StringRect")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("StringRect")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/StringRect/Form1.h b/Chapter11/StringRect/Form1.h new file mode 100644 index 0000000..713878b --- /dev/null +++ b/Chapter11/StringRect/Form1.h @@ -0,0 +1,62 @@ +#pragma once + +namespace StringRect +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"String in a Rectangle"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + // Draw the string + e->Graphics->DrawString( + "Let's draw string to a rectangle and go a little " + "overboard on the size of the string that we place " + "inside of it", + gcnew Drawing::Font(gcnew FontFamily("Arial"), 12), + Brushes::Black, Drawing::RectangleF(20.0, 40.0, 260.0, 50.0)); + } + }; +} + diff --git a/Chapter11/StringRect/Form1.resx b/Chapter11/StringRect/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/StringRect/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/StringRect/StringRect.cpp b/Chapter11/StringRect/StringRect.cpp new file mode 100644 index 0000000..236d8f7 --- /dev/null +++ b/Chapter11/StringRect/StringRect.cpp @@ -0,0 +1,16 @@ +// StringRect.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace StringRect; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/StringRect/StringRect.vcproj b/Chapter11/StringRect/StringRect.vcproj new file mode 100644 index 0000000..6065c76 --- /dev/null +++ b/Chapter11/StringRect/StringRect.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/StringRect/stdafx.cpp b/Chapter11/StringRect/stdafx.cpp new file mode 100644 index 0000000..4fdd513 --- /dev/null +++ b/Chapter11/StringRect/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// StringRect.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/StringRect/stdafx.h b/Chapter11/StringRect/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/StringRect/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter11/TextureBrushEx/AssemblyInfo.cpp b/Chapter11/TextureBrushEx/AssemblyInfo.cpp new file mode 100644 index 0000000..aecf127 --- /dev/null +++ b/Chapter11/TextureBrushEx/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("TextureBrushEx")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("TextureBrushEx")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter11/TextureBrushEx/Form1.h b/Chapter11/TextureBrushEx/Form1.h new file mode 100644 index 0000000..6d1c151 --- /dev/null +++ b/Chapter11/TextureBrushEx/Form1.h @@ -0,0 +1,68 @@ +#pragma once + +namespace TextureBrushEx +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + using namespace System::Drawing::Drawing2D; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->SuspendLayout(); + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 273); + this->Name = L"Form1"; + this->Text = L"Texture Brush"; + this->Paint += + gcnew System::Windows::Forms::PaintEventHandler(this, + &Form1::Form1_Paint); + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void Form1_Paint(System::Object^ sender, + System::Windows::Forms::PaintEventArgs^ e) + { + // Load Image + Image^ bimage = gcnew Bitmap("Images\\CLICppCover.gif"); + // Create brush + TextureBrush^ tbsh = gcnew TextureBrush(bimage, + WrapMode::TileFlipXY); + + // Translate brush to same start location as rectangle + tbsh->TranslateTransform(25,25); + // Fill rectangle with brush + e->Graphics->FillRectangle(tbsh, 25, 25, 250, 250); + } + }; +} + diff --git a/Chapter11/TextureBrushEx/Form1.resx b/Chapter11/TextureBrushEx/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter11/TextureBrushEx/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter11/TextureBrushEx/Images/CLICppCover.gif b/Chapter11/TextureBrushEx/Images/CLICppCover.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9c6832627f8d753f565cc5c193f60f4fb5173d9 GIT binary patch literal 6345 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 literal 0 HcmV?d00001 diff --git a/Chapter11/TextureBrushEx/TextureBrushEx.cpp b/Chapter11/TextureBrushEx/TextureBrushEx.cpp new file mode 100644 index 0000000..03eafef --- /dev/null +++ b/Chapter11/TextureBrushEx/TextureBrushEx.cpp @@ -0,0 +1,16 @@ +// TextureBrushEx.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace TextureBrushEx; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter11/TextureBrushEx/TextureBrushEx.vcproj b/Chapter11/TextureBrushEx/TextureBrushEx.vcproj new file mode 100644 index 0000000..21d1fdc --- /dev/null +++ b/Chapter11/TextureBrushEx/TextureBrushEx.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter11/TextureBrushEx/stdafx.cpp b/Chapter11/TextureBrushEx/stdafx.cpp new file mode 100644 index 0000000..0f33915 --- /dev/null +++ b/Chapter11/TextureBrushEx/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// TextureBrushEx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter11/TextureBrushEx/stdafx.h b/Chapter11/TextureBrushEx/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter11/TextureBrushEx/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter12/Chapter12.sln b/Chapter12/Chapter12.sln new file mode 100644 index 0000000..e82e6dd --- /dev/null +++ b/Chapter12/Chapter12.sln @@ -0,0 +1,56 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConnectedBasics", "ConnectedBasics\ConnectedBasics.vcproj", "{2DC9A390-3E87-42EE-8B41-51CFF97B9BF9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConnectedQuery", "ConnectedQuery\ConnectedQuery.vcproj", "{A0E86769-5151-4BF7-93B8-4FA17F13C852}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConnectedModify", "ConnectedModify\ConnectedModify.vcproj", "{910D4881-67F1-406F-A113-A2CFFF394516}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConnectedScalar", "ConnectedScalar\ConnectedScalar.vcproj", "{13DD5229-6E0B-4854-84D1-D636709DB707}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Transactions", "Transactions\Transactions.vcproj", "{543DD624-E3EE-4F4A-916E-9BC69F37386F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaintAuthors", "MaintAuthors\MaintAuthors.vcproj", "{D2015709-AED8-4CBE-BA7A-AF827598C993}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaintAuthorsDGV", "MaintAuthorsDGV\MaintAuthorsDGV.vcproj", "{4E9D3D57-F86E-46FC-80E8-44D7EE05CB07}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2DC9A390-3E87-42EE-8B41-51CFF97B9BF9}.Debug|Win32.ActiveCfg = Debug|Win32 + {2DC9A390-3E87-42EE-8B41-51CFF97B9BF9}.Debug|Win32.Build.0 = Debug|Win32 + {2DC9A390-3E87-42EE-8B41-51CFF97B9BF9}.Release|Win32.ActiveCfg = Release|Win32 + {2DC9A390-3E87-42EE-8B41-51CFF97B9BF9}.Release|Win32.Build.0 = Release|Win32 + {A0E86769-5151-4BF7-93B8-4FA17F13C852}.Debug|Win32.ActiveCfg = Debug|Win32 + {A0E86769-5151-4BF7-93B8-4FA17F13C852}.Debug|Win32.Build.0 = Debug|Win32 + {A0E86769-5151-4BF7-93B8-4FA17F13C852}.Release|Win32.ActiveCfg = Release|Win32 + {A0E86769-5151-4BF7-93B8-4FA17F13C852}.Release|Win32.Build.0 = Release|Win32 + {910D4881-67F1-406F-A113-A2CFFF394516}.Debug|Win32.ActiveCfg = Debug|Win32 + {910D4881-67F1-406F-A113-A2CFFF394516}.Debug|Win32.Build.0 = Debug|Win32 + {910D4881-67F1-406F-A113-A2CFFF394516}.Release|Win32.ActiveCfg = Release|Win32 + {910D4881-67F1-406F-A113-A2CFFF394516}.Release|Win32.Build.0 = Release|Win32 + {13DD5229-6E0B-4854-84D1-D636709DB707}.Debug|Win32.ActiveCfg = Debug|Win32 + {13DD5229-6E0B-4854-84D1-D636709DB707}.Debug|Win32.Build.0 = Debug|Win32 + {13DD5229-6E0B-4854-84D1-D636709DB707}.Release|Win32.ActiveCfg = Release|Win32 + {13DD5229-6E0B-4854-84D1-D636709DB707}.Release|Win32.Build.0 = Release|Win32 + {543DD624-E3EE-4F4A-916E-9BC69F37386F}.Debug|Win32.ActiveCfg = Debug|Win32 + {543DD624-E3EE-4F4A-916E-9BC69F37386F}.Debug|Win32.Build.0 = Debug|Win32 + {543DD624-E3EE-4F4A-916E-9BC69F37386F}.Release|Win32.ActiveCfg = Release|Win32 + {543DD624-E3EE-4F4A-916E-9BC69F37386F}.Release|Win32.Build.0 = Release|Win32 + {D2015709-AED8-4CBE-BA7A-AF827598C993}.Debug|Win32.ActiveCfg = Debug|Win32 + {D2015709-AED8-4CBE-BA7A-AF827598C993}.Debug|Win32.Build.0 = Debug|Win32 + {D2015709-AED8-4CBE-BA7A-AF827598C993}.Release|Win32.ActiveCfg = Release|Win32 + {D2015709-AED8-4CBE-BA7A-AF827598C993}.Release|Win32.Build.0 = Release|Win32 + {4E9D3D57-F86E-46FC-80E8-44D7EE05CB07}.Debug|Win32.ActiveCfg = Debug|Win32 + {4E9D3D57-F86E-46FC-80E8-44D7EE05CB07}.Debug|Win32.Build.0 = Debug|Win32 + {4E9D3D57-F86E-46FC-80E8-44D7EE05CB07}.Release|Win32.ActiveCfg = Release|Win32 + {4E9D3D57-F86E-46FC-80E8-44D7EE05CB07}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter12/Chapter12.suo b/Chapter12/Chapter12.suo new file mode 100644 index 0000000000000000000000000000000000000000..dd465a6a125ed4548e55fd95a439cc9cfeae75ab GIT binary patch literal 30208 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 e + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("")]; +[assembly:AssemblyCopyrightAttribute("")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter12/ConnectedBasics/ConnectedBasics.cpp b/Chapter12/ConnectedBasics/ConnectedBasics.cpp new file mode 100644 index 0000000..e2d7910 --- /dev/null +++ b/Chapter12/ConnectedBasics/ConnectedBasics.cpp @@ -0,0 +1,36 @@ +using namespace System; +using namespace System::Data; +using namespace System::Data::SqlClient; + +void main() +{ + SqlConnection^ connection = gcnew SqlConnection(); + +#ifdef SQLAuth + // SQL Server authentication + connection->ConnectionString = + "User ID=sa; Password=;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#else + // Windows Integrated Security + connection->ConnectionString = + "Persist Security Info=False; Integrated Security=SSPI;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#endif + + try + { + connection->Open(); + Console::WriteLine("We got a connection!"); + } + catch (SqlException ^e) + { + Console::WriteLine("No connection the following error occurred: {0}", + e->Message); + } + finally + { + connection->Close(); + Console::WriteLine("The connection to the database has been closed"); + } +} diff --git a/Chapter12/ConnectedBasics/ConnectedBasics.vcproj b/Chapter12/ConnectedBasics/ConnectedBasics.vcproj new file mode 100644 index 0000000..72bb251 --- /dev/null +++ b/Chapter12/ConnectedBasics/ConnectedBasics.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter12/ConnectedModify/AssemblyInfo.cpp b/Chapter12/ConnectedModify/AssemblyInfo.cpp new file mode 100644 index 0000000..ecf7042 --- /dev/null +++ b/Chapter12/ConnectedModify/AssemblyInfo.cpp @@ -0,0 +1,61 @@ +#using + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("")]; +[assembly:AssemblyCopyrightAttribute("")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter12/ConnectedModify/ConnectedModify.cpp b/Chapter12/ConnectedModify/ConnectedModify.cpp new file mode 100644 index 0000000..4be0465 --- /dev/null +++ b/Chapter12/ConnectedModify/ConnectedModify.cpp @@ -0,0 +1,66 @@ +#using +#using + +using namespace System; +using namespace System::Data; +using namespace System::Data::SqlClient; + +void main() +{ + String ^Name = "Doors"; + + SqlConnection ^connection = gcnew SqlConnection(); + +#ifdef SQLAuth + // SQL Server authentication + connection->ConnectionString = + "User ID=sa; Password=;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#else + // Windows Integrated Security + connection->ConnectionString = + "Persist Security Info=False; Integrated Security=SSPI;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#endif + + try + { + SqlCommand ^cmd = gcnew SqlCommand(); + cmd->Connection = connection; + connection->Open(); + + cmd->CommandType = CommandType::StoredProcedure; + cmd->CommandText = "InsertAuthor"; + + cmd->Parameters->Add(gcnew SqlParameter("@LastName",SqlDbType::VarChar)); + cmd->Parameters->Add(gcnew SqlParameter("@FirstName",SqlDbType::VarChar)); + + cmd->Parameters["@LastName"]->Value = "Dope"; + cmd->Parameters["@FirstName"]->Value = "John"; + + int affected = cmd->ExecuteNonQuery(); + Console::WriteLine("Insert - {0} rows are affected", affected); + + cmd->CommandType = CommandType::Text; + cmd->CommandText = "UPDATE Authors SET LastName = 'Doe'" + "WHERE LastName = 'Dope'"; + + affected = cmd->ExecuteNonQuery(); + Console::WriteLine("Update - {0} rows are affected", affected); + + cmd->CommandType = CommandType::Text; + cmd->CommandText = "DELETE FROM Authors WHERE LastName = 'Doe'"; + + affected = cmd->ExecuteNonQuery(); + Console::WriteLine("Delete - {0} rows are affected", affected); + } + catch (SqlException ^e) + { + Console::WriteLine("No connection the following error occurred: {0}", + e->Message); + } + finally + { + connection->Close(); + } +} \ No newline at end of file diff --git a/Chapter12/ConnectedModify/ConnectedModify.vcproj b/Chapter12/ConnectedModify/ConnectedModify.vcproj new file mode 100644 index 0000000..41f6734 --- /dev/null +++ b/Chapter12/ConnectedModify/ConnectedModify.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter12/ConnectedQuery/AssemblyInfo.cpp b/Chapter12/ConnectedQuery/AssemblyInfo.cpp new file mode 100644 index 0000000..ecf7042 --- /dev/null +++ b/Chapter12/ConnectedQuery/AssemblyInfo.cpp @@ -0,0 +1,61 @@ +#using + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("")]; +[assembly:AssemblyCopyrightAttribute("")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter12/ConnectedQuery/ConnectedQuery.cpp b/Chapter12/ConnectedQuery/ConnectedQuery.cpp new file mode 100644 index 0000000..1189e22 --- /dev/null +++ b/Chapter12/ConnectedQuery/ConnectedQuery.cpp @@ -0,0 +1,87 @@ +#using +#using + +using namespace System; +using namespace System::Data; +using namespace System::Data::SqlClient; + +void main() +{ + String ^Name = "Doors"; + + SqlConnection ^connection = gcnew SqlConnection(); + +#ifdef SQLAuth + // SQL Server authentication + connection->ConnectionString = + "User ID=sa; Password=;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#else + // Windows Integrated Security + connection->ConnectionString = + "Persist Security Info=False; Integrated Security=SSPI;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#endif + + try + { + SqlCommand ^cmd = gcnew SqlCommand(); + cmd->Connection = connection; + + cmd->CommandType = CommandType::Text; + cmd->CommandText = + String::Format("SELECT FirstName, LastName FROM Authors " + "WHERE LastName = '{0}'", + Name); + + connection->Open(); + + SqlDataReader ^reader = cmd->ExecuteReader(); + + while(reader->Read()) + { + Console::WriteLine("{0} {1}", + reader["FirstName"], reader["LastName"]); + } + reader->Close(); + + // CREATE PROCEDURE dbo.StoriesWhereLastName + // ( + // @LastName NVARCHAR(32) = NULL + // ) + // AS + // /* SET NOCOUNT ON */ + + // SELECT StoryID, Headline, Story FROM Stories + // WHERE LastName = @LastName + // + // RETURN + + cmd->CommandType = CommandType::StoredProcedure; + cmd->CommandText = "StoriesWhereLastName"; + + cmd->Parameters->Add(gcnew SqlParameter("@LastName",SqlDbType::VarChar)); + cmd->Parameters["@LastName"]->Value = Name; + + reader = cmd->ExecuteReader(); + + Console::WriteLine("------------------------------------------------"); + while(reader->Read()) + { + Console::WriteLine(reader["StoryID"]); + Console::WriteLine(reader["Headline"]); + Console::WriteLine(reader["Story"]); + Console::WriteLine(); + } + reader->Close(); + } + catch (SqlException ^e) + { + Console::WriteLine("No connection the following error occurred: {0}", + e->Message); + } + finally + { + connection->Close(); + } +} \ No newline at end of file diff --git a/Chapter12/ConnectedQuery/ConnectedQuery.vcproj b/Chapter12/ConnectedQuery/ConnectedQuery.vcproj new file mode 100644 index 0000000..b7d5784 --- /dev/null +++ b/Chapter12/ConnectedQuery/ConnectedQuery.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter12/ConnectedScalar/AssemblyInfo.cpp b/Chapter12/ConnectedScalar/AssemblyInfo.cpp new file mode 100644 index 0000000..ecf7042 --- /dev/null +++ b/Chapter12/ConnectedScalar/AssemblyInfo.cpp @@ -0,0 +1,61 @@ +#using + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("")]; +[assembly:AssemblyCopyrightAttribute("")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter12/ConnectedScalar/ConnectedScalar.cpp b/Chapter12/ConnectedScalar/ConnectedScalar.cpp new file mode 100644 index 0000000..c5b33f3 --- /dev/null +++ b/Chapter12/ConnectedScalar/ConnectedScalar.cpp @@ -0,0 +1,51 @@ +#using +#using + +using namespace System; +using namespace System::Data; +using namespace System::Data::SqlClient; + +void main() +{ + SqlConnection ^connection = gcnew SqlConnection(); + +#ifdef SQLAuth + // SQL Server authentication + connection->ConnectionString = + "User ID=sa; Password=;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#else + // Windows Integrated Security + connection->ConnectionString = + "Persist Security Info=False; Integrated Security=SSPI;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#endif + + try + { + SqlCommand ^cmd = gcnew SqlCommand(); + cmd->Connection = connection; + connection->Open(); + + cmd->CommandType = CommandType::Text; + cmd->CommandText = "SELECT COUNT(*) FROM Authors"; + + Object ^NumAuthors = cmd->ExecuteScalar(); + Console::WriteLine("The number of Authors are {0}", NumAuthors); + + cmd->CommandType = CommandType::Text; + cmd->CommandText = "SELECT SUM(AuthorID) FROM Authors"; + + Object ^UselessNum = cmd->ExecuteScalar(); + Console::WriteLine("The Sum of AuthorIDs for fun is {0}", UselessNum); + } + catch (SqlException ^e) + { + Console::WriteLine("No connection the following error occurred: {0}", + e->Message); + } + finally + { + connection->Close(); + } +} \ No newline at end of file diff --git a/Chapter12/ConnectedScalar/ConnectedScalar.vcproj b/Chapter12/ConnectedScalar/ConnectedScalar.vcproj new file mode 100644 index 0000000..7b5ff37 --- /dev/null +++ b/Chapter12/ConnectedScalar/ConnectedScalar.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter12/MaintAuthors/AssemblyInfo.cpp b/Chapter12/MaintAuthors/AssemblyInfo.cpp new file mode 100644 index 0000000..a1ea1fc --- /dev/null +++ b/Chapter12/MaintAuthors/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("MaintAuthors")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("MaintAuthors")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter12/MaintAuthors/Form1.h b/Chapter12/MaintAuthors/Form1.h new file mode 100644 index 0000000..f012dba --- /dev/null +++ b/Chapter12/MaintAuthors/Form1.h @@ -0,0 +1,363 @@ +#pragma once + + +namespace MaintAuthors +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Data::SqlClient; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + SqlConnection ^connect = gcnew SqlConnection(); + +#ifdef SQLAuth + // SQL Server authentication + connect->ConnectionString = + "User ID=sa; Password=;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#else + // Windows Integrated Security + connect->ConnectionString = + "Persist Security Info=False; Integrated Security=SSPI;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#endif + + dAdapt = gcnew SqlDataAdapter(); + dAdapt->MissingSchemaAction = MissingSchemaAction::AddWithKey; + + dAdapt->SelectCommand = gcnew SqlCommand("SELECT AuthorID, LastName, FirstName FROM Authors", connect); + + dAdapt->InsertCommand = gcnew SqlCommand("INSERT INTO Authors (LastName, FirstName) " + "VALUES (@LastName, @FirstName)", connect); + dAdapt->InsertCommand->Parameters->Add("@LastName", SqlDbType::VarChar, 50, "LastName"); + dAdapt->InsertCommand->Parameters->Add("@FirstName", SqlDbType::VarChar, 50, "FirstName"); + + + dAdapt->UpdateCommand = gcnew SqlCommand("UPDATE Authors SET LastName = @LastName, FirstName = @FirstName " + "WHERE AuthorID = @AuthorID", connect); + dAdapt->UpdateCommand->Parameters->Add("@LastName", SqlDbType::VarChar, 50, "LastName"); + dAdapt->UpdateCommand->Parameters->Add("@FirstName", SqlDbType::VarChar, 50, "FirstName"); + dAdapt->UpdateCommand->Parameters->Add("@AuthorID", SqlDbType::Int, 4, "AuthorID"); + + dAdapt->DeleteCommand = gcnew SqlCommand("DELETE FROM Authors WHERE AuthorID = @AuthorID", connect); + dAdapt->DeleteCommand->Parameters->Add("@AuthorID", SqlDbType::Int, 4, "AuthorID"); + + dSet = gcnew DataSet(); + dAdapt->Fill(dSet, "Authors"); + + DataTable ^dt = dSet->Tables["Authors"]; + + if (dt == nullptr) + throw gcnew Exception("No Authors Table"); + + IEnumerator ^Enum = dt->Rows->GetEnumerator(); + while(Enum->MoveNext()) + { + DataRow ^row = (DataRow^)(Enum->Current); + lbAuthors->Items->Add(ListBoxItem(row)); + } + CurrentAuthorID = -1; + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Button^ bnRollback; + System::Windows::Forms::Button^ bnCommit; + System::Windows::Forms::Button^ bnDelete; + System::Windows::Forms::Button^ bnUpdate; + System::Windows::Forms::Button^ bnAdd; + System::Windows::Forms::ListBox^ lbAuthors; + System::Windows::Forms::TextBox^ tbLastName; + System::Windows::Forms::TextBox^ tbFirstName; + System::Windows::Forms::Label^ label2; + System::Windows::Forms::Label^ label1; + + System::ComponentModel::Container ^components; + + SqlDataAdapter ^dAdapt; + DataSet ^dSet; + int CurrentAuthorID; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->bnRollback = (gcnew System::Windows::Forms::Button()); + this->bnCommit = (gcnew System::Windows::Forms::Button()); + this->bnDelete = (gcnew System::Windows::Forms::Button()); + this->bnUpdate = (gcnew System::Windows::Forms::Button()); + this->bnAdd = (gcnew System::Windows::Forms::Button()); + this->lbAuthors = (gcnew System::Windows::Forms::ListBox()); + this->tbLastName = (gcnew System::Windows::Forms::TextBox()); + this->tbFirstName = (gcnew System::Windows::Forms::TextBox()); + this->label2 = (gcnew System::Windows::Forms::Label()); + this->label1 = (gcnew System::Windows::Forms::Label()); + this->SuspendLayout(); + // + // bnRollback + // + this->bnRollback->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, + static_cast(0))); + this->bnRollback->Location = System::Drawing::Point(312, 162); + this->bnRollback->Name = L"bnRollback"; + this->bnRollback->Size = System::Drawing::Size(75, 23); + this->bnRollback->TabIndex = 19; + this->bnRollback->Text = L"Rollback"; + this->bnRollback->Click += gcnew System::EventHandler(this, &Form1::bnRollback_Click); + // + // bnCommit + // + this->bnCommit->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, + static_cast(0))); + this->bnCommit->Location = System::Drawing::Point(312, 132); + this->bnCommit->Margin = System::Windows::Forms::Padding(3, 0, 3, 3); + this->bnCommit->Name = L"bnCommit"; + this->bnCommit->Size = System::Drawing::Size(75, 23); + this->bnCommit->TabIndex = 18; + this->bnCommit->Text = L"Commit"; + this->bnCommit->Click += gcnew System::EventHandler(this, &Form1::bnCommit_Click); + // + // bnDelete + // + this->bnDelete->Location = System::Drawing::Point(312, 78); + this->bnDelete->Name = L"bnDelete"; + this->bnDelete->Size = System::Drawing::Size(75, 23); + this->bnDelete->TabIndex = 17; + this->bnDelete->Text = L"Delete"; + this->bnDelete->Click += gcnew System::EventHandler(this, &Form1::bnDelete_Click); + // + // bnUpdate + // + this->bnUpdate->Location = System::Drawing::Point(312, 46); + this->bnUpdate->Name = L"bnUpdate"; + this->bnUpdate->Size = System::Drawing::Size(75, 23); + this->bnUpdate->TabIndex = 16; + this->bnUpdate->Text = L"Update"; + this->bnUpdate->Click += gcnew System::EventHandler(this, &Form1::bnUpdate_Click); + // + // bnAdd + // + this->bnAdd->Location = System::Drawing::Point(312, 18); + this->bnAdd->Margin = System::Windows::Forms::Padding(3, 3, 3, 1); + this->bnAdd->Name = L"bnAdd"; + this->bnAdd->Size = System::Drawing::Size(75, 23); + this->bnAdd->TabIndex = 15; + this->bnAdd->Text = L"Add"; + this->bnAdd->Click += gcnew System::EventHandler(this, &Form1::bnAdd_Click); + // + // lbAuthors + // + this->lbAuthors->FormattingEnabled = true; + this->lbAuthors->Location = System::Drawing::Point(25, 95); + this->lbAuthors->Name = L"lbAuthors"; + this->lbAuthors->Size = System::Drawing::Size(257, 95); + this->lbAuthors->TabIndex = 14; + this->lbAuthors->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::lbAuthors_SelectedIndexChanged); + // + // tbLastName + // + this->tbLastName->Location = System::Drawing::Point(87, 51); + this->tbLastName->Margin = System::Windows::Forms::Padding(1, 3, 3, 3); + this->tbLastName->Name = L"tbLastName"; + this->tbLastName->Size = System::Drawing::Size(127, 20); + this->tbLastName->TabIndex = 13; + // + // tbFirstName + // + this->tbFirstName->Location = System::Drawing::Point(87, 24); + this->tbFirstName->Margin = System::Windows::Forms::Padding(1, 3, 3, 3); + this->tbFirstName->Name = L"tbFirstName"; + this->tbFirstName->Size = System::Drawing::Size(127, 20); + this->tbFirstName->TabIndex = 12; + // + // label2 + // + this->label2->AutoSize = true; + this->label2->Location = System::Drawing::Point(25, 57); + this->label2->Margin = System::Windows::Forms::Padding(3, 3, 2, 3); + this->label2->Name = L"label2"; + this->label2->Size = System::Drawing::Size(58, 13); + this->label2->TabIndex = 11; + this->label2->Text = L"Last Name"; + // + // label1 + // + this->label1->AutoSize = true; + this->label1->Location = System::Drawing::Point(25, 27); + this->label1->Margin = System::Windows::Forms::Padding(3, 3, 2, 3); + this->label1->Name = L"label1"; + this->label1->Size = System::Drawing::Size(57, 13); + this->label1->TabIndex = 10; + this->label1->Text = L"First Name"; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(413, 208); + this->Controls->Add(this->bnRollback); + this->Controls->Add(this->bnCommit); + this->Controls->Add(this->bnDelete); + this->Controls->Add(this->bnUpdate); + this->Controls->Add(this->bnAdd); + this->Controls->Add(this->lbAuthors); + this->Controls->Add(this->tbLastName); + this->Controls->Add(this->tbFirstName); + this->Controls->Add(this->label2); + this->Controls->Add(this->label1); + this->Name = L"Form1"; + this->Text = L"Maintain Authors"; + this->ResumeLayout(false); + this->PerformLayout(); + + } + +#pragma endregion + + private: + String ^ListBoxItem(DataRow ^row) + { + return String::Format("{0} {1} {2}", + row["AuthorID"], + row["FirstName"], + row["LastName"]); + } + + System::Void bnAdd_Click(System::Object^ sender, System::EventArgs^ e) + { + // Make sure the text boxes are populated + if (tbFirstName->Text->Trim()->Length == 0 || + tbLastName->Text->Trim()->Length == 0) + return; + + // Create a new row in the DataTable + DataTable ^dt = dSet->Tables["Authors"]; + DataRow ^row = dt->NewRow(); + + // Update the columns with the new author information + row["FirstName"] = tbFirstName->Text; + row["LastName"] = tbLastName->Text; + + // Add the row to the Rows collection + dt->Rows->Add(row); + + // Add the new row to the list box + lbAuthors->Items->Add(ListBoxItem(row)); + + // blank out the text boxes + tbFirstName->Text = ""; + tbLastName->Text = ""; + } + + System::Void bnUpdate_Click(System::Object^ sender, System::EventArgs^ e) + { + // make sure we have a selected author from the listbox + if (CurrentAuthorID < 0) + return; + + // Select the author using its AuthorID + DataTable ^dt = dSet->Tables["Authors"]; + array^ row = + dt->Select(String::Format("AuthorID={0}", CurrentAuthorID)); + + // Since we know that AuthorID is unique only one row will be returned + // Update the row with the text box information + row[0]["FirstName"] = tbFirstName->Text; + row[0]["LastName"] = tbLastName->Text; + + // Update listbox + lbAuthors->Items->Insert(lbAuthors->SelectedIndex, ListBoxItem(row[0])); + lbAuthors->Items->RemoveAt(lbAuthors->SelectedIndex); + } + + System::Void bnDelete_Click(System::Object^ sender, System::EventArgs^ e) + { + // make sure we have a selected author from the listbox + if (CurrentAuthorID < 0) + return; + + // Select the author using its AuthorID + DataTable ^dt = dSet->Tables["Authors"]; + array^ row = + dt->Select(String::Format("AuthorID={0}", CurrentAuthorID)); + + // Since we know that AuthorID is unique only one row will be returned + // Delete the row + row[0]->Delete(); + + // all went well, delete the row from list box + lbAuthors->Items->RemoveAt(lbAuthors->SelectedIndex); + } + + System::Void bnCommit_Click(System::Object^ sender, System::EventArgs^ e) + { + dAdapt->Update(dSet, "Authors"); + dSet->AcceptChanges(); + + lbAuthors->Items->Clear(); + + DataTable ^dt = dSet->Tables["Authors"]; + + IEnumerator ^Enum = dt->Rows->GetEnumerator(); + while(Enum->MoveNext()) + { + DataRow ^row = (DataRow^)(Enum->Current); + lbAuthors->Items->Add(ListBoxItem(row)); + } + CurrentAuthorID = -1; + } + + System::Void bnRollback_Click(System::Object^ sender, System::EventArgs^ e) + { + dSet->RejectChanges(); + + lbAuthors->Items->Clear(); + + DataTable ^dt = dSet->Tables["Authors"]; + + IEnumerator ^Enum = dt->Rows->GetEnumerator(); + while(Enum->MoveNext()) + { + DataRow ^row = (DataRow^)(Enum->Current); + lbAuthors->Items->Add(ListBoxItem(row)); + } + CurrentAuthorID = -1; + } + + System::Void lbAuthors_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) + { + array^ ASpace = gcnew array {(wchar_t)' '}; + + if (lbAuthors->SelectedItem == nullptr) + { + CurrentAuthorID = -1; + tbFirstName->Text = ""; + tbLastName->Text = ""; + return; + } + array^ split = lbAuthors->SelectedItem->ToString()->Split(ASpace); + + CurrentAuthorID = Convert::ToInt32(split[0]); + tbFirstName->Text = split[1]; + tbLastName->Text = split[2]; + } + }; +} + diff --git a/Chapter12/MaintAuthors/Form1.resx b/Chapter12/MaintAuthors/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter12/MaintAuthors/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter12/MaintAuthors/MaintAuthors.cpp b/Chapter12/MaintAuthors/MaintAuthors.cpp new file mode 100644 index 0000000..a28e145 --- /dev/null +++ b/Chapter12/MaintAuthors/MaintAuthors.cpp @@ -0,0 +1,16 @@ +// MaintAuthors.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace MaintAuthors; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter12/MaintAuthors/MaintAuthors.vcproj b/Chapter12/MaintAuthors/MaintAuthors.vcproj new file mode 100644 index 0000000..a9647be --- /dev/null +++ b/Chapter12/MaintAuthors/MaintAuthors.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter12/MaintAuthors/stdafx.cpp b/Chapter12/MaintAuthors/stdafx.cpp new file mode 100644 index 0000000..198bfa9 --- /dev/null +++ b/Chapter12/MaintAuthors/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MaintAuthors.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter12/MaintAuthors/stdafx.h b/Chapter12/MaintAuthors/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter12/MaintAuthors/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter12/MaintAuthorsDGV/AssemblyInfo.cpp b/Chapter12/MaintAuthorsDGV/AssemblyInfo.cpp new file mode 100644 index 0000000..e1aeb41 --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("MaintAuthorsDGV")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("MaintAuthorsDGV")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter12/MaintAuthorsDGV/AuthorsDS.h b/Chapter12/MaintAuthorsDGV/AuthorsDS.h new file mode 100644 index 0000000..8ef1593 --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/AuthorsDS.h @@ -0,0 +1,1020 @@ +#pragma once + +#using +#using +#using +#using +#using + +using namespace System::Security::Permissions; +[assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum, SkipVerification=false)]; +// +// This source code was auto-generated by xsd, Version=2.0.50630.0. +// +namespace MaintAuthorsDGV { + using namespace System; + + using namespace System; + ref class AuthorsDS; + + + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0"), + Serializable, + System::ComponentModel::DesignerCategoryAttribute(L"code"), + System::ComponentModel::ToolboxItem(true), + System::Xml::Serialization::XmlSchemaProviderAttribute(L"GetTypedDataSetSchema"), + System::Xml::Serialization::XmlRootAttribute(L"AuthorsDS"), + System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.DataSet"), + System::CLSCompliantAttribute(false)] + public ref class AuthorsDS : public System::Data::DataSet { + public : ref class AuthorsDataTable; + public : ref class AuthorsRow; + public : ref class AuthorsRowChangeEvent; + + private: MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ tableAuthors; + + private: System::Data::SchemaSerializationMode _schemaSerializationMode; + + public : delegate System::Void AuthorsRowChangeEventHandler(System::Object^ sender, MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEvent^ e); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + AuthorsDS(); + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + AuthorsDS(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::Browsable(false), + System::ComponentModel::DesignerSerializationVisibility(System::ComponentModel::DesignerSerializationVisibility::Content)] + property MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ Authors { + MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual property System::Data::SchemaSerializationMode SchemaSerializationMode { + System::Data::SchemaSerializationMode get() override; + System::Void set(System::Data::SchemaSerializationMode value) override; + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::DesignerSerializationVisibilityAttribute(System::ComponentModel::DesignerSerializationVisibility::Hidden)] + property System::Data::DataTableCollection^ Tables { + System::Data::DataTableCollection^ get() new; + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::DesignerSerializationVisibilityAttribute(System::ComponentModel::DesignerSerializationVisibility::Hidden)] + property System::Data::DataRelationCollection^ Relations { + System::Data::DataRelationCollection^ get() new; + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::DefaultValueAttribute(true)] + property System::Boolean EnforceConstraints { + System::Boolean get() new; + System::Void set(System::Boolean value) new; + } + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void InitializeDerivedDataSet() override; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataSet^ Clone() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Boolean ShouldSerializeTables() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Boolean ShouldSerializeRelations() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void ReadXmlSerializable(System::Xml::XmlReader^ reader) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Xml::Schema::XmlSchema^ GetSchemaSerializable() override; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitVars(); + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitVars(System::Boolean initTable); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitClass(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Boolean ShouldSerializeAuthors(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void SchemaChanged(System::Object^ sender, System::ComponentModel::CollectionChangeEventArgs^ e); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + static System::Xml::Schema::XmlSchemaComplexType^ GetTypedDataSetSchema(System::Xml::Schema::XmlSchemaSet^ xs); + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0"), + System::Serializable, + System::Xml::Serialization::XmlSchemaProviderAttribute(L"GetTypedTableSchema")] + ref class AuthorsDataTable : public System::Data::DataTable, public System::Collections::IEnumerable { + + private: System::Data::DataColumn^ columnAuthorID; + + private: System::Data::DataColumn^ columnLastName; + + private: System::Data::DataColumn^ columnFirstName; + + public: event MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEventHandler^ AuthorsRowChanging; + + public: event MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEventHandler^ AuthorsRowChanged; + + public: event MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEventHandler^ AuthorsRowDeleting; + + public: event MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEventHandler^ AuthorsRowDeleted; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + AuthorsDataTable(); + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + AuthorsDataTable(System::Data::DataTable^ table); + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + AuthorsDataTable(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ AuthorIDColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ LastNameColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ FirstNameColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::Browsable(false)] + property System::Int32 Count { + System::Int32 get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property MaintAuthorsDGV::AuthorsDS::AuthorsRow^ default [System::Int32 ] { + MaintAuthorsDGV::AuthorsDS::AuthorsRow^ get(System::Int32 index); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void AddAuthorsRow(MaintAuthorsDGV::AuthorsDS::AuthorsRow^ row); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MaintAuthorsDGV::AuthorsDS::AuthorsRow^ AddAuthorsRow(System::String^ LastName, System::String^ FirstName); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MaintAuthorsDGV::AuthorsDS::AuthorsRow^ FindByAuthorID(System::Int32 AuthorID); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Collections::IEnumerator^ GetEnumerator(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataTable^ Clone() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataTable^ CreateInstance() override; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitVars(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitClass(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MaintAuthorsDGV::AuthorsDS::AuthorsRow^ NewAuthorsRow(); + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataRow^ NewRowFromBuilder(System::Data::DataRowBuilder^ builder) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Type^ GetRowType() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowChanged(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowChanging(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowDeleted(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowDeleting(System::Data::DataRowChangeEventArgs^ e) override; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void RemoveAuthorsRow(MaintAuthorsDGV::AuthorsDS::AuthorsRow^ row); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + static System::Xml::Schema::XmlSchemaComplexType^ GetTypedTableSchema(System::Xml::Schema::XmlSchemaSet^ xs); + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0")] + ref class AuthorsRow : public System::Data::DataRow { + + private: MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ tableAuthors; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + AuthorsRow(System::Data::DataRowBuilder^ rb); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Int32 AuthorID { + System::Int32 get(); + System::Void set(System::Int32 value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::String^ LastName { + System::String^ get(); + System::Void set(System::String^ value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::String^ FirstName { + System::String^ get(); + System::Void set(System::String^ value); + } + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0")] + ref class AuthorsRowChangeEvent : public System::EventArgs { + + private: MaintAuthorsDGV::AuthorsDS::AuthorsRow^ eventRow; + + private: System::Data::DataRowAction eventAction; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + AuthorsRowChangeEvent(MaintAuthorsDGV::AuthorsDS::AuthorsRow^ row, System::Data::DataRowAction action); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property MaintAuthorsDGV::AuthorsDS::AuthorsRow^ Row { + MaintAuthorsDGV::AuthorsDS::AuthorsRow^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataRowAction Action { + System::Data::DataRowAction get(); + } + }; + }; +} +namespace MaintAuthorsDGV { + + + inline AuthorsDS::AuthorsDS() { + this->BeginInit(); + this->InitClass(); + System::ComponentModel::CollectionChangeEventHandler^ schemaChangedHandler = gcnew System::ComponentModel::CollectionChangeEventHandler(this, &MaintAuthorsDGV::AuthorsDS::SchemaChanged); + __super::Tables->CollectionChanged += schemaChangedHandler; + __super::Relations->CollectionChanged += schemaChangedHandler; + this->EndInit(); + } + + inline AuthorsDS::AuthorsDS(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context) : + System::Data::DataSet(info, context) { + if (this->IsBinarySerialized(info, context) == true) { + this->InitVars(false); + System::ComponentModel::CollectionChangeEventHandler^ schemaChangedHandler1 = gcnew System::ComponentModel::CollectionChangeEventHandler(this, &MaintAuthorsDGV::AuthorsDS::SchemaChanged); + this->Tables->CollectionChanged += schemaChangedHandler1; + this->Relations->CollectionChanged += schemaChangedHandler1; + return; + } + System::String^ strSchema = (cli::safe_cast(info->GetValue(L"XmlSchema", System::String::typeid))); + if (this->DetermineSchemaSerializationMode(info, context) == System::Data::SchemaSerializationMode::IncludeSchema) { + System::Data::DataSet^ ds = (gcnew System::Data::DataSet()); + ds->EnforceConstraints = false; + ds->ReadXmlSchema((gcnew System::Xml::XmlTextReader((gcnew System::IO::StringReader(strSchema))))); + if (ds->Tables[L"Authors"] != nullptr) { + __super::Tables->Add((gcnew MaintAuthorsDGV::AuthorsDS::AuthorsDataTable(ds->Tables[L"Authors"]))); + } + this->DataSetName = ds->DataSetName; + this->Prefix = ds->Prefix; + this->Namespace = ds->Namespace; + this->Locale = ds->Locale; + this->CaseSensitive = ds->CaseSensitive; + this->EnforceConstraints = ds->EnforceConstraints; + this->Merge(ds, false, System::Data::MissingSchemaAction::Add); + this->InitVars(); + } + else { + this->ReadXmlSchema((gcnew System::Xml::XmlTextReader((gcnew System::IO::StringReader(strSchema))))); + } + this->GetSerializationData(info, context); + System::ComponentModel::CollectionChangeEventHandler^ schemaChangedHandler = gcnew System::ComponentModel::CollectionChangeEventHandler(this, &MaintAuthorsDGV::AuthorsDS::SchemaChanged); + __super::Tables->CollectionChanged += schemaChangedHandler; + this->Relations->CollectionChanged += schemaChangedHandler; + } + + inline MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ AuthorsDS::Authors::get() { + return this->tableAuthors; + } + + inline System::Data::SchemaSerializationMode AuthorsDS::SchemaSerializationMode::get() { + return this->_schemaSerializationMode; + } + inline System::Void AuthorsDS::SchemaSerializationMode::set(System::Data::SchemaSerializationMode value) { + this->_schemaSerializationMode = __identifier(value); + } + + inline System::Data::DataTableCollection^ AuthorsDS::Tables::get() { + return __super::Tables; + } + + inline System::Data::DataRelationCollection^ AuthorsDS::Relations::get() { + return __super::Relations; + } + + inline System::Boolean AuthorsDS::EnforceConstraints::get() { + return __super::EnforceConstraints; + } + inline System::Void AuthorsDS::EnforceConstraints::set(System::Boolean value) { + __super::EnforceConstraints = __identifier(value); + } + + inline System::Void AuthorsDS::InitializeDerivedDataSet() { + this->BeginInit(); + this->InitClass(); + this->EndInit(); + } + + inline System::Data::DataSet^ AuthorsDS::Clone() { + MaintAuthorsDGV::AuthorsDS^ cln = (cli::safe_cast(__super::Clone())); + cln->InitVars(); + return cln; + } + + inline System::Boolean AuthorsDS::ShouldSerializeTables() { + return false; + } + + inline System::Boolean AuthorsDS::ShouldSerializeRelations() { + return false; + } + + inline System::Void AuthorsDS::ReadXmlSerializable(System::Xml::XmlReader^ reader) { + if (this->DetermineSchemaSerializationMode(reader) == System::Data::SchemaSerializationMode::IncludeSchema) { + this->Reset(); + System::Data::DataSet^ ds = (gcnew System::Data::DataSet()); + ds->ReadXml(reader); + if (ds->Tables[L"Authors"] != nullptr) { + __super::Tables->Add((gcnew MaintAuthorsDGV::AuthorsDS::AuthorsDataTable(ds->Tables[L"Authors"]))); + } + this->DataSetName = ds->DataSetName; + this->Prefix = ds->Prefix; + this->Namespace = ds->Namespace; + this->Locale = ds->Locale; + this->CaseSensitive = ds->CaseSensitive; + this->EnforceConstraints = ds->EnforceConstraints; + this->Merge(ds, false, System::Data::MissingSchemaAction::Add); + this->InitVars(); + } + else { + this->ReadXml(reader); + this->InitVars(); + } + } + + inline System::Xml::Schema::XmlSchema^ AuthorsDS::GetSchemaSerializable() { + System::IO::MemoryStream^ stream = (gcnew System::IO::MemoryStream()); + this->WriteXmlSchema((gcnew System::Xml::XmlTextWriter(stream, nullptr))); + stream->Position = 0; + return System::Xml::Schema::XmlSchema::Read((gcnew System::Xml::XmlTextReader(stream)), nullptr); + } + + inline System::Void AuthorsDS::InitVars() { + this->InitVars(true); + } + + inline System::Void AuthorsDS::InitVars(System::Boolean initTable) { + this->tableAuthors = (cli::safe_cast(__super::Tables[L"Authors"])); + if (initTable == true) { + if (this->tableAuthors != nullptr) { + this->tableAuthors->InitVars(); + } + } + } + + inline System::Void AuthorsDS::InitClass() { + this->DataSetName = L"AuthorsDS"; + this->Prefix = L""; + this->Namespace = L"http://tempuri.org/AuthorsDS.xsd"; + this->EnforceConstraints = true; + this->tableAuthors = (gcnew MaintAuthorsDGV::AuthorsDS::AuthorsDataTable()); + __super::Tables->Add(this->tableAuthors); + } + + inline System::Boolean AuthorsDS::ShouldSerializeAuthors() { + return false; + } + + inline System::Void AuthorsDS::SchemaChanged(System::Object^ sender, System::ComponentModel::CollectionChangeEventArgs^ e) { + if (e->Action == System::ComponentModel::CollectionChangeAction::Remove) { + this->InitVars(); + } + } + + inline System::Xml::Schema::XmlSchemaComplexType^ AuthorsDS::GetTypedDataSetSchema(System::Xml::Schema::XmlSchemaSet^ xs) { + MaintAuthorsDGV::AuthorsDS^ ds = (gcnew MaintAuthorsDGV::AuthorsDS()); + System::Xml::Schema::XmlSchemaComplexType^ type = (gcnew System::Xml::Schema::XmlSchemaComplexType()); + System::Xml::Schema::XmlSchemaSequence^ sequence = (gcnew System::Xml::Schema::XmlSchemaSequence()); + xs->Add(ds->GetSchemaSerializable()); + System::Xml::Schema::XmlSchemaAny^ any = (gcnew System::Xml::Schema::XmlSchemaAny()); + any->Namespace = ds->Namespace; + sequence->Items->Add(any); + type->Particle = sequence; + return type; + } + + + inline AuthorsDS::AuthorsDataTable::AuthorsDataTable() { + this->TableName = L"Authors"; + this->BeginInit(); + this->InitClass(); + this->EndInit(); + } + + inline AuthorsDS::AuthorsDataTable::AuthorsDataTable(System::Data::DataTable^ table) { + this->TableName = table->TableName; + if (table->CaseSensitive != table->DataSet->CaseSensitive) { + this->CaseSensitive = table->CaseSensitive; + } + if (table->Locale->ToString() != table->DataSet->Locale->ToString()) { + this->Locale = table->Locale; + } + if (table->Namespace != table->DataSet->Namespace) { + this->Namespace = table->Namespace; + } + this->Prefix = table->Prefix; + this->MinimumCapacity = table->MinimumCapacity; + } + + inline AuthorsDS::AuthorsDataTable::AuthorsDataTable(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context) : + System::Data::DataTable(info, context) { + this->InitVars(); + } + + inline System::Data::DataColumn^ AuthorsDS::AuthorsDataTable::AuthorIDColumn::get() { + return this->columnAuthorID; + } + + inline System::Data::DataColumn^ AuthorsDS::AuthorsDataTable::LastNameColumn::get() { + return this->columnLastName; + } + + inline System::Data::DataColumn^ AuthorsDS::AuthorsDataTable::FirstNameColumn::get() { + return this->columnFirstName; + } + + inline System::Int32 AuthorsDS::AuthorsDataTable::Count::get() { + return this->Rows->Count; + } + + inline MaintAuthorsDGV::AuthorsDS::AuthorsRow^ AuthorsDS::AuthorsDataTable::default::get(System::Int32 index) { + return (cli::safe_cast(this->Rows[index])); + } + + inline System::Void AuthorsDS::AuthorsDataTable::AddAuthorsRow(MaintAuthorsDGV::AuthorsDS::AuthorsRow^ row) { + this->Rows->Add(row); + } + + inline MaintAuthorsDGV::AuthorsDS::AuthorsRow^ AuthorsDS::AuthorsDataTable::AddAuthorsRow(System::String^ LastName, + System::String^ FirstName) { + MaintAuthorsDGV::AuthorsDS::AuthorsRow^ rowAuthorsRow = (cli::safe_cast(this->NewRow())); + rowAuthorsRow->ItemArray = gcnew cli::array< System::Object^ >(3) {nullptr, LastName, FirstName}; + this->Rows->Add(rowAuthorsRow); + return rowAuthorsRow; + } + + inline MaintAuthorsDGV::AuthorsDS::AuthorsRow^ AuthorsDS::AuthorsDataTable::FindByAuthorID(System::Int32 AuthorID) { + return (cli::safe_cast(this->Rows->Find(gcnew cli::array< System::Object^ >(1) {AuthorID}))); + } + + inline System::Collections::IEnumerator^ AuthorsDS::AuthorsDataTable::GetEnumerator() { + return this->Rows->GetEnumerator(); + } + + inline System::Data::DataTable^ AuthorsDS::AuthorsDataTable::Clone() { + MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ cln = (cli::safe_cast(__super::Clone())); + cln->InitVars(); + return cln; + } + + inline System::Data::DataTable^ AuthorsDS::AuthorsDataTable::CreateInstance() { + return (gcnew MaintAuthorsDGV::AuthorsDS::AuthorsDataTable()); + } + + inline System::Void AuthorsDS::AuthorsDataTable::InitVars() { + this->columnAuthorID = __super::Columns[L"AuthorID"]; + this->columnLastName = __super::Columns[L"LastName"]; + this->columnFirstName = __super::Columns[L"FirstName"]; + } + + inline System::Void AuthorsDS::AuthorsDataTable::InitClass() { + this->columnAuthorID = (gcnew System::Data::DataColumn(L"AuthorID", System::Int32::typeid, nullptr, System::Data::MappingType::Element)); + __super::Columns->Add(this->columnAuthorID); + this->columnLastName = (gcnew System::Data::DataColumn(L"LastName", System::String::typeid, nullptr, System::Data::MappingType::Element)); + __super::Columns->Add(this->columnLastName); + this->columnFirstName = (gcnew System::Data::DataColumn(L"FirstName", System::String::typeid, nullptr, System::Data::MappingType::Element)); + __super::Columns->Add(this->columnFirstName); + this->Constraints->Add((gcnew System::Data::UniqueConstraint(L"Constraint1", gcnew cli::array< System::Data::DataColumn^ >(1) {this->columnAuthorID}, + true))); + this->columnAuthorID->AutoIncrement = true; + this->columnAuthorID->AutoIncrementSeed = -1; + this->columnAuthorID->AutoIncrementStep = -1; + this->columnAuthorID->AllowDBNull = false; + this->columnAuthorID->ReadOnly = true; + this->columnAuthorID->Unique = true; + this->columnLastName->AllowDBNull = false; + this->columnLastName->MaxLength = 50; + this->columnFirstName->AllowDBNull = false; + this->columnFirstName->MaxLength = 50; + this->Locale = (gcnew System::Globalization::CultureInfo(L"en-US")); + } + + inline MaintAuthorsDGV::AuthorsDS::AuthorsRow^ AuthorsDS::AuthorsDataTable::NewAuthorsRow() { + return (cli::safe_cast(this->NewRow())); + } + + inline System::Data::DataRow^ AuthorsDS::AuthorsDataTable::NewRowFromBuilder(System::Data::DataRowBuilder^ builder) { + return (gcnew MaintAuthorsDGV::AuthorsDS::AuthorsRow(builder)); + } + + inline System::Type^ AuthorsDS::AuthorsDataTable::GetRowType() { + return MaintAuthorsDGV::AuthorsDS::AuthorsRow::typeid; + } + + inline System::Void AuthorsDS::AuthorsDataTable::OnRowChanged(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowChanged(e); + { + this->AuthorsRowChanged(this, (gcnew MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void AuthorsDS::AuthorsDataTable::OnRowChanging(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowChanging(e); + { + this->AuthorsRowChanging(this, (gcnew MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void AuthorsDS::AuthorsDataTable::OnRowDeleted(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowDeleted(e); + { + this->AuthorsRowDeleted(this, (gcnew MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void AuthorsDS::AuthorsDataTable::OnRowDeleting(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowDeleting(e); + { + this->AuthorsRowDeleting(this, (gcnew MaintAuthorsDGV::AuthorsDS::AuthorsRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void AuthorsDS::AuthorsDataTable::RemoveAuthorsRow(MaintAuthorsDGV::AuthorsDS::AuthorsRow^ row) { + this->Rows->Remove(row); + } + + inline System::Xml::Schema::XmlSchemaComplexType^ AuthorsDS::AuthorsDataTable::GetTypedTableSchema(System::Xml::Schema::XmlSchemaSet^ xs) { + System::Xml::Schema::XmlSchemaComplexType^ type = (gcnew System::Xml::Schema::XmlSchemaComplexType()); + System::Xml::Schema::XmlSchemaSequence^ sequence = (gcnew System::Xml::Schema::XmlSchemaSequence()); + MaintAuthorsDGV::AuthorsDS^ ds = (gcnew MaintAuthorsDGV::AuthorsDS()); + xs->Add(ds->GetSchemaSerializable()); + System::Xml::Schema::XmlSchemaAny^ any1 = (gcnew System::Xml::Schema::XmlSchemaAny()); + any1->Namespace = L"http://www.w3.org/2001/XMLSchema"; + any1->MinOccurs = System::Decimal(0); + any1->MaxOccurs = System::Decimal::MaxValue; + any1->ProcessContents = System::Xml::Schema::XmlSchemaContentProcessing::Lax; + sequence->Items->Add(any1); + System::Xml::Schema::XmlSchemaAny^ any2 = (gcnew System::Xml::Schema::XmlSchemaAny()); + any2->Namespace = L"urn:schemas-microsoft-com:xml-diffgram-v1"; + any2->MinOccurs = System::Decimal(1); + any2->ProcessContents = System::Xml::Schema::XmlSchemaContentProcessing::Lax; + sequence->Items->Add(any2); + System::Xml::Schema::XmlSchemaAttribute^ attribute1 = (gcnew System::Xml::Schema::XmlSchemaAttribute()); + attribute1->Name = L"namespace"; + attribute1->FixedValue = ds->Namespace; + type->Attributes->Add(attribute1); + System::Xml::Schema::XmlSchemaAttribute^ attribute2 = (gcnew System::Xml::Schema::XmlSchemaAttribute()); + attribute2->Name = L"tableTypeName"; + attribute2->FixedValue = L"AuthorsDataTable"; + type->Attributes->Add(attribute2); + type->Particle = sequence; + return type; + } + + + inline AuthorsDS::AuthorsRow::AuthorsRow(System::Data::DataRowBuilder^ rb) : + System::Data::DataRow(rb) { + this->tableAuthors = (cli::safe_cast(this->Table)); + } + + inline System::Int32 AuthorsDS::AuthorsRow::AuthorID::get() { + return (*cli::safe_cast(this[this->tableAuthors->AuthorIDColumn])); + } + inline System::Void AuthorsDS::AuthorsRow::AuthorID::set(System::Int32 value) { + this[this->tableAuthors->AuthorIDColumn] = value; + } + + inline System::String^ AuthorsDS::AuthorsRow::LastName::get() { + return (cli::safe_cast(this[this->tableAuthors->LastNameColumn])); + } + inline System::Void AuthorsDS::AuthorsRow::LastName::set(System::String^ value) { + this[this->tableAuthors->LastNameColumn] = value; + } + + inline System::String^ AuthorsDS::AuthorsRow::FirstName::get() { + return (cli::safe_cast(this[this->tableAuthors->FirstNameColumn])); + } + inline System::Void AuthorsDS::AuthorsRow::FirstName::set(System::String^ value) { + this[this->tableAuthors->FirstNameColumn] = value; + } + + + inline AuthorsDS::AuthorsRowChangeEvent::AuthorsRowChangeEvent(MaintAuthorsDGV::AuthorsDS::AuthorsRow^ row, System::Data::DataRowAction action) { + this->eventRow = row; + this->eventAction = action; + } + + inline MaintAuthorsDGV::AuthorsDS::AuthorsRow^ AuthorsDS::AuthorsRowChangeEvent::Row::get() { + return this->eventRow; + } + + inline System::Data::DataRowAction AuthorsDS::AuthorsRowChangeEvent::Action::get() { + return this->eventAction; + } +} +namespace MaintAuthorsDGV { + namespace AuthorsDSTableAdapters { + + using namespace System; + ref class AuthorsTableAdapter; + + + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0"), + System::ComponentModel::DesignerCategoryAttribute(L"code"), + System::ComponentModel::ToolboxItem(true), + System::ComponentModel::DataObjectAttribute(true), + System::ComponentModel::DesignerAttribute(L"Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +L", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), + System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter"), + System::CLSCompliantAttribute(false)] + public ref class AuthorsTableAdapter : public System::ComponentModel::Component { + + private: System::Data::SqlClient::SqlDataAdapter^ _adapter; + + private: System::Data::SqlClient::SqlConnection^ _connection; + + private: cli::array< System::Data::SqlClient::SqlCommand^ >^ _commandCollection; + + private: System::Boolean _clearBeforeFill; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + AuthorsTableAdapter(); + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::SqlClient::SqlDataAdapter^ Adapter { + System::Data::SqlClient::SqlDataAdapter^ get(); + } + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::SqlClient::SqlConnection^ Connection { + System::Data::SqlClient::SqlConnection^ get(); + System::Void set(System::Data::SqlClient::SqlConnection^ value); + } + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property cli::array< System::Data::SqlClient::SqlCommand^ >^ CommandCollection { + cli::array< System::Data::SqlClient::SqlCommand^ >^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Boolean ClearBeforeFill { + System::Boolean get(); + System::Void set(System::Boolean value); + } + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitAdapter(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitConnection(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitCommandCollection(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + [System::ComponentModel::DataObjectMethodAttribute(System::ComponentModel::DataObjectMethodType::Fill, true)] + virtual System::Int32 Fill(MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ dataTable); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + [System::ComponentModel::DataObjectMethodAttribute(System::ComponentModel::DataObjectMethodType::Select, true)] + virtual MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ GetData(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + virtual System::Int32 Update(MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ dataTable); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + virtual System::Int32 Update(MaintAuthorsDGV::AuthorsDS^ dataSet); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + virtual System::Int32 Update(System::Data::DataRow^ dataRow); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + virtual System::Int32 Update(cli::array< System::Data::DataRow^ >^ dataRows); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + [System::ComponentModel::DataObjectMethodAttribute(System::ComponentModel::DataObjectMethodType::Delete, true)] + virtual System::Int32 Delete(System::Int32 Original_AuthorID, System::String^ Original_LastName, System::String^ Original_FirstName); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + [System::ComponentModel::DataObjectMethodAttribute(System::ComponentModel::DataObjectMethodType::Insert, true)] + virtual System::Int32 Insert(System::String^ LastName, System::String^ FirstName); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + [System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.TableAdapter")] + [System::ComponentModel::DataObjectMethodAttribute(System::ComponentModel::DataObjectMethodType::Update, true)] + virtual System::Int32 Update( + System::String^ LastName, + System::String^ FirstName, + System::Int32 Original_AuthorID, + System::String^ Original_LastName, + System::String^ Original_FirstName, + System::Int32 AuthorID); + }; + } +} +namespace MaintAuthorsDGV { + namespace AuthorsDSTableAdapters { + + + inline AuthorsTableAdapter::AuthorsTableAdapter() { + this->ClearBeforeFill = true; + } + + inline System::Data::SqlClient::SqlDataAdapter^ AuthorsTableAdapter::Adapter::get() { + if (this->_adapter == nullptr) { + this->InitAdapter(); + } + return this->_adapter; + } + + inline System::Data::SqlClient::SqlConnection^ AuthorsTableAdapter::Connection::get() { + if (this->_connection == nullptr) { + this->InitConnection(); + } + return this->_connection; + } + inline System::Void AuthorsTableAdapter::Connection::set(System::Data::SqlClient::SqlConnection^ value) { + this->_connection = __identifier(value); + if (this->Adapter->InsertCommand != nullptr) { + this->Adapter->InsertCommand->Connection = __identifier(value); + } + if (this->Adapter->DeleteCommand != nullptr) { + this->Adapter->DeleteCommand->Connection = __identifier(value); + } + if (this->Adapter->UpdateCommand != nullptr) { + this->Adapter->UpdateCommand->Connection = __identifier(value); + } + for ( System::Int32 i = 0; (i < this->CommandCollection->Length); i = (i + 1)) { + if (this->CommandCollection[i] != nullptr) { + (cli::safe_cast(this->CommandCollection[i]))->Connection = __identifier(value); + } + } + } + + inline cli::array< System::Data::SqlClient::SqlCommand^ >^ AuthorsTableAdapter::CommandCollection::get() { + if (this->_commandCollection == nullptr) { + this->InitCommandCollection(); + } + return this->_commandCollection; + } + + inline System::Boolean AuthorsTableAdapter::ClearBeforeFill::get() { + return this->_clearBeforeFill; + } + inline System::Void AuthorsTableAdapter::ClearBeforeFill::set(System::Boolean value) { + this->_clearBeforeFill = __identifier(value); + } + + inline System::Void AuthorsTableAdapter::InitAdapter() { + this->_adapter = (gcnew System::Data::SqlClient::SqlDataAdapter()); + System::Data::Common::DataTableMapping^ tableMapping = (gcnew System::Data::Common::DataTableMapping()); + tableMapping->SourceTable = L"Table"; + tableMapping->DataSetTable = L"Authors"; + tableMapping->ColumnMappings->Add(L"AuthorID", L"AuthorID"); + tableMapping->ColumnMappings->Add(L"LastName", L"LastName"); + tableMapping->ColumnMappings->Add(L"FirstName", L"FirstName"); + this->_adapter->TableMappings->Add(tableMapping); + this->_adapter->DeleteCommand = (gcnew System::Data::SqlClient::SqlCommand()); + this->_adapter->DeleteCommand->Connection = this->Connection; + this->_adapter->DeleteCommand->CommandText = L"DELETE FROM [dbo].[Authors] WHERE (([AuthorID] = @Original_AuthorID) AND ([LastNa" +L"me] = @Original_LastName) AND ([FirstName] = @Original_FirstName))"; + this->_adapter->DeleteCommand->CommandType = System::Data::CommandType::Text; + this->_adapter->DeleteCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@Original_AuthorID", System::Data::SqlDbType::Int, + 0, System::Data::ParameterDirection::Input, 0, 0, L"AuthorID", System::Data::DataRowVersion::Original, false, nullptr, + L"", L"", L""))); + this->_adapter->DeleteCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@Original_LastName", System::Data::SqlDbType::VarChar, + 0, System::Data::ParameterDirection::Input, 0, 0, L"LastName", System::Data::DataRowVersion::Original, false, nullptr, + L"", L"", L""))); + this->_adapter->DeleteCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@Original_FirstName", System::Data::SqlDbType::VarChar, + 0, System::Data::ParameterDirection::Input, 0, 0, L"FirstName", System::Data::DataRowVersion::Original, false, nullptr, + L"", L"", L""))); + this->_adapter->InsertCommand = (gcnew System::Data::SqlClient::SqlCommand()); + this->_adapter->InsertCommand->Connection = this->Connection; + this->_adapter->InsertCommand->CommandText = L"INSERT INTO [dbo].[Authors] ([LastName], [FirstName]) VALUES (@LastName, @FirstNa" +L"me);\r\nSELECT AuthorID, LastName, FirstName FROM Authors WHERE (AuthorID = SCOPE_" +L"IDENTITY())"; + this->_adapter->InsertCommand->CommandType = System::Data::CommandType::Text; + this->_adapter->InsertCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@LastName", System::Data::SqlDbType::VarChar, + 0, System::Data::ParameterDirection::Input, 0, 0, L"LastName", System::Data::DataRowVersion::Current, false, nullptr, + L"", L"", L""))); + this->_adapter->InsertCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@FirstName", System::Data::SqlDbType::VarChar, + 0, System::Data::ParameterDirection::Input, 0, 0, L"FirstName", System::Data::DataRowVersion::Current, false, nullptr, + L"", L"", L""))); + this->_adapter->UpdateCommand = (gcnew System::Data::SqlClient::SqlCommand()); + this->_adapter->UpdateCommand->Connection = this->Connection; + this->_adapter->UpdateCommand->CommandText = L"UPDATE [dbo].[Authors] SET [LastName] = @LastName, [FirstName] = @FirstName WHERE" +L" (([AuthorID] = @Original_AuthorID) AND ([LastName] = @Original_LastName) AND ([" +L"FirstName] = @Original_FirstName));\r\nSELECT AuthorID, LastName, FirstName FROM A" +L"uthors WHERE (AuthorID = @AuthorID)"; + this->_adapter->UpdateCommand->CommandType = System::Data::CommandType::Text; + this->_adapter->UpdateCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@LastName", System::Data::SqlDbType::VarChar, + 0, System::Data::ParameterDirection::Input, 0, 0, L"LastName", System::Data::DataRowVersion::Current, false, nullptr, + L"", L"", L""))); + this->_adapter->UpdateCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@FirstName", System::Data::SqlDbType::VarChar, + 0, System::Data::ParameterDirection::Input, 0, 0, L"FirstName", System::Data::DataRowVersion::Current, false, nullptr, + L"", L"", L""))); + this->_adapter->UpdateCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@Original_AuthorID", System::Data::SqlDbType::Int, + 0, System::Data::ParameterDirection::Input, 0, 0, L"AuthorID", System::Data::DataRowVersion::Original, false, nullptr, + L"", L"", L""))); + this->_adapter->UpdateCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@Original_LastName", System::Data::SqlDbType::VarChar, + 0, System::Data::ParameterDirection::Input, 0, 0, L"LastName", System::Data::DataRowVersion::Original, false, nullptr, + L"", L"", L""))); + this->_adapter->UpdateCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@Original_FirstName", System::Data::SqlDbType::VarChar, + 0, System::Data::ParameterDirection::Input, 0, 0, L"FirstName", System::Data::DataRowVersion::Original, false, nullptr, + L"", L"", L""))); + this->_adapter->UpdateCommand->Parameters->Add((gcnew System::Data::SqlClient::SqlParameter(L"@AuthorID", System::Data::SqlDbType::Int, + 4, System::Data::ParameterDirection::Input, 0, 0, L"AuthorID", System::Data::DataRowVersion::Current, false, nullptr, + L"", L"", L""))); + } + + inline System::Void AuthorsTableAdapter::InitConnection() { + this->_connection = (gcnew System::Data::SqlClient::SqlConnection()); + this->_connection->ConnectionString = L"Data Source=AMIDALA;Initial Catalog=DCV_DB;Integrated Security=True;Pooling=False" +L""; + } + + inline System::Void AuthorsTableAdapter::InitCommandCollection() { + this->_commandCollection = gcnew cli::array< System::Data::SqlClient::SqlCommand^ >(1); + this->_commandCollection[0] = (gcnew System::Data::SqlClient::SqlCommand()); + this->_commandCollection[0]->Connection = this->Connection; + this->_commandCollection[0]->CommandText = L"SELECT AuthorID, LastName, FirstName FROM dbo.Authors"; + this->_commandCollection[0]->CommandType = System::Data::CommandType::Text; + } + + inline System::Int32 AuthorsTableAdapter::Fill(MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ dataTable) { + this->Adapter->SelectCommand = this->CommandCollection[0]; + if (this->ClearBeforeFill == true) { + dataTable->Clear(); + } + System::Int32 returnValue = this->Adapter->Fill(dataTable); + return returnValue; + } + + inline MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ AuthorsTableAdapter::GetData() { + this->Adapter->SelectCommand = this->CommandCollection[0]; + MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ dataTable = (gcnew MaintAuthorsDGV::AuthorsDS::AuthorsDataTable()); + this->Adapter->Fill(dataTable); + return dataTable; + } + + inline System::Int32 AuthorsTableAdapter::Update(MaintAuthorsDGV::AuthorsDS::AuthorsDataTable^ dataTable) { + return this->Adapter->Update(dataTable); + } + + inline System::Int32 AuthorsTableAdapter::Update(MaintAuthorsDGV::AuthorsDS^ dataSet) { + return this->Adapter->Update(dataSet, L"Authors"); + } + + inline System::Int32 AuthorsTableAdapter::Update(System::Data::DataRow^ dataRow) { + return this->Adapter->Update(gcnew cli::array< System::Data::DataRow^ >(1) {dataRow}); + } + + inline System::Int32 AuthorsTableAdapter::Update(cli::array< System::Data::DataRow^ >^ dataRows) { + return this->Adapter->Update(dataRows); + } + + inline System::Int32 AuthorsTableAdapter::Delete(System::Int32 Original_AuthorID, System::String^ Original_LastName, + System::String^ Original_FirstName) { + this->Adapter->DeleteCommand->Parameters[0]->Value = static_cast(Original_AuthorID); + if (Original_LastName == nullptr) { + throw (gcnew System::ArgumentNullException(L"Original_LastName")); + } + else { + this->Adapter->DeleteCommand->Parameters[1]->Value = (cli::safe_cast(Original_LastName)); + } + if (Original_FirstName == nullptr) { + throw (gcnew System::ArgumentNullException(L"Original_FirstName")); + } + else { + this->Adapter->DeleteCommand->Parameters[2]->Value = (cli::safe_cast(Original_FirstName)); + } + System::Data::ConnectionState previousConnectionState = this->Adapter->DeleteCommand->Connection->State; + this->Adapter->DeleteCommand->Connection->Open(); + try { + System::Int32 returnValue = this->Adapter->DeleteCommand->ExecuteNonQuery(); + return returnValue; + } + finally { + if (previousConnectionState == System::Data::ConnectionState::Closed) { + this->Adapter->DeleteCommand->Connection->Close(); + } + } + } + + inline System::Int32 AuthorsTableAdapter::Insert(System::String^ LastName, System::String^ FirstName) { + if (LastName == nullptr) { + throw (gcnew System::ArgumentNullException(L"LastName")); + } + else { + this->Adapter->InsertCommand->Parameters[0]->Value = (cli::safe_cast(LastName)); + } + if (FirstName == nullptr) { + throw (gcnew System::ArgumentNullException(L"FirstName")); + } + else { + this->Adapter->InsertCommand->Parameters[1]->Value = (cli::safe_cast(FirstName)); + } + System::Data::ConnectionState previousConnectionState = this->Adapter->InsertCommand->Connection->State; + this->Adapter->InsertCommand->Connection->Open(); + try { + System::Int32 returnValue = this->Adapter->InsertCommand->ExecuteNonQuery(); + return returnValue; + } + finally { + if (previousConnectionState == System::Data::ConnectionState::Closed) { + this->Adapter->InsertCommand->Connection->Close(); + } + } + } + + inline System::Int32 AuthorsTableAdapter::Update( + System::String^ LastName, + System::String^ FirstName, + System::Int32 Original_AuthorID, + System::String^ Original_LastName, + System::String^ Original_FirstName, + System::Int32 AuthorID) { + if (LastName == nullptr) { + throw (gcnew System::ArgumentNullException(L"LastName")); + } + else { + this->Adapter->UpdateCommand->Parameters[0]->Value = (cli::safe_cast(LastName)); + } + if (FirstName == nullptr) { + throw (gcnew System::ArgumentNullException(L"FirstName")); + } + else { + this->Adapter->UpdateCommand->Parameters[1]->Value = (cli::safe_cast(FirstName)); + } + this->Adapter->UpdateCommand->Parameters[2]->Value = static_cast(Original_AuthorID); + if (Original_LastName == nullptr) { + throw (gcnew System::ArgumentNullException(L"Original_LastName")); + } + else { + this->Adapter->UpdateCommand->Parameters[3]->Value = (cli::safe_cast(Original_LastName)); + } + if (Original_FirstName == nullptr) { + throw (gcnew System::ArgumentNullException(L"Original_FirstName")); + } + else { + this->Adapter->UpdateCommand->Parameters[4]->Value = (cli::safe_cast(Original_FirstName)); + } + this->Adapter->UpdateCommand->Parameters[5]->Value = static_cast(AuthorID); + System::Data::ConnectionState previousConnectionState = this->Adapter->UpdateCommand->Connection->State; + this->Adapter->UpdateCommand->Connection->Open(); + try { + System::Int32 returnValue = this->Adapter->UpdateCommand->ExecuteNonQuery(); + return returnValue; + } + finally { + if (previousConnectionState == System::Data::ConnectionState::Closed) { + this->Adapter->UpdateCommand->Connection->Close(); + } + } + } + } +} diff --git a/Chapter12/MaintAuthorsDGV/AuthorsDS.xsc b/Chapter12/MaintAuthorsDGV/AuthorsDS.xsc new file mode 100644 index 0000000..5dbde4a --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/AuthorsDS.xsc @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/Chapter12/MaintAuthorsDGV/AuthorsDS.xsd b/Chapter12/MaintAuthorsDGV/AuthorsDS.xsd new file mode 100644 index 0000000..3909605 --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/AuthorsDS.xsd @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + DELETE FROM [dbo].[Authors] WHERE (([AuthorID] = @Original_AuthorID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName)) + + + + + + + + + + + + + INSERT INTO [dbo].[Authors] ([LastName], [FirstName]) VALUES (@LastName, @FirstName); +SELECT AuthorID, LastName, FirstName FROM Authors WHERE (AuthorID = SCOPE_IDENTITY()) + + + + + + + + + + + SELECT AuthorID, LastName, FirstName FROM dbo.Authors + + + + + + + UPDATE [dbo].[Authors] SET [LastName] = @LastName, [FirstName] = @FirstName WHERE (([AuthorID] = @Original_AuthorID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName)); +SELECT AuthorID, LastName, FirstName FROM Authors WHERE (AuthorID = @AuthorID) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter12/MaintAuthorsDGV/AuthorsDS.xss b/Chapter12/MaintAuthorsDGV/AuthorsDS.xss new file mode 100644 index 0000000..4b6513d --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/AuthorsDS.xss @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/Chapter12/MaintAuthorsDGV/Form1.h b/Chapter12/MaintAuthorsDGV/Form1.h new file mode 100644 index 0000000..f4e457e --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/Form1.h @@ -0,0 +1,179 @@ +#pragma once + + +namespace MaintAuthorsDGV +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::DataGridView^ dataGridView1; + System::Windows::Forms::BindingSource^ authorsDSBindingSource; + MaintAuthorsDGV::AuthorsDS^ AuthorsDS; + MaintAuthorsDGV::AuthorsDSTableAdapters::AuthorsTableAdapter^ AuthorsTableAdapter; + System::Windows::Forms::Button^ bnCommit; + System::Windows::Forms::Button^ bnRollback; + private: System::Windows::Forms::DataGridViewTextBoxColumn^ authorIDDataGridViewTextBoxColumn; + private: System::Windows::Forms::DataGridViewTextBoxColumn^ lastNameDataGridViewTextBoxColumn; + private: System::Windows::Forms::DataGridViewTextBoxColumn^ firstNameDataGridViewTextBoxColumn; + + + + + + + System::ComponentModel::IContainer^ components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->components = (gcnew System::ComponentModel::Container()); + System::Windows::Forms::DataGridViewCellStyle^ dataGridViewCellStyle1 = (gcnew System::Windows::Forms::DataGridViewCellStyle()); + this->dataGridView1 = (gcnew System::Windows::Forms::DataGridView()); + this->authorIDDataGridViewTextBoxColumn = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); + this->lastNameDataGridViewTextBoxColumn = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); + this->firstNameDataGridViewTextBoxColumn = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); + this->authorsDSBindingSource = (gcnew System::Windows::Forms::BindingSource(this->components)); + this->AuthorsDS = (gcnew MaintAuthorsDGV::AuthorsDS()); + this->AuthorsTableAdapter = (gcnew MaintAuthorsDGV::AuthorsDSTableAdapters::AuthorsTableAdapter()); + this->bnCommit = (gcnew System::Windows::Forms::Button()); + this->bnRollback = (gcnew System::Windows::Forms::Button()); + (cli::safe_cast(this->dataGridView1))->BeginInit(); + (cli::safe_cast(this->authorsDSBindingSource))->BeginInit(); + (cli::safe_cast(this->AuthorsDS))->BeginInit(); + this->SuspendLayout(); + // + // dataGridView1 + // + this->dataGridView1->Anchor = static_cast((((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom) + | System::Windows::Forms::AnchorStyles::Left) + | System::Windows::Forms::AnchorStyles::Right)); + this->dataGridView1->AutoGenerateColumns = false; + this->dataGridView1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize; + this->dataGridView1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^ >(3) {this->authorIDDataGridViewTextBoxColumn, + this->lastNameDataGridViewTextBoxColumn, this->firstNameDataGridViewTextBoxColumn}); + this->dataGridView1->DataSource = this->authorsDSBindingSource; + this->dataGridView1->ImeMode = System::Windows::Forms::ImeMode::Disable; + this->dataGridView1->Location = System::Drawing::Point(12, 13); + this->dataGridView1->Name = L"dataGridView1"; + this->dataGridView1->Size = System::Drawing::Size(403, 219); + this->dataGridView1->TabIndex = 0; + // + // authorIDDataGridViewTextBoxColumn + // + this->authorIDDataGridViewTextBoxColumn->DataPropertyName = L"AuthorID"; + dataGridViewCellStyle1->Alignment = System::Windows::Forms::DataGridViewContentAlignment::MiddleCenter; + this->authorIDDataGridViewTextBoxColumn->DefaultCellStyle = dataGridViewCellStyle1; + this->authorIDDataGridViewTextBoxColumn->HeaderText = L"AuthorID"; + this->authorIDDataGridViewTextBoxColumn->Name = L"authorIDDataGridViewTextBoxColumn"; + this->authorIDDataGridViewTextBoxColumn->ReadOnly = true; + this->authorIDDataGridViewTextBoxColumn->Width = 60; + // + // lastNameDataGridViewTextBoxColumn + // + this->lastNameDataGridViewTextBoxColumn->DataPropertyName = L"LastName"; + this->lastNameDataGridViewTextBoxColumn->HeaderText = L"LastName"; + this->lastNameDataGridViewTextBoxColumn->Name = L"lastNameDataGridViewTextBoxColumn"; + this->lastNameDataGridViewTextBoxColumn->Width = 150; + // + // firstNameDataGridViewTextBoxColumn + // + this->firstNameDataGridViewTextBoxColumn->DataPropertyName = L"FirstName"; + this->firstNameDataGridViewTextBoxColumn->HeaderText = L"FirstName"; + this->firstNameDataGridViewTextBoxColumn->Name = L"firstNameDataGridViewTextBoxColumn"; + this->firstNameDataGridViewTextBoxColumn->Width = 150; + // + // authorsDSBindingSource + // + this->authorsDSBindingSource->DataMember = L"Authors"; + this->authorsDSBindingSource->DataSource = this->AuthorsDS; + // + // AuthorsDS + // + this->AuthorsDS->DataSetName = L"AuthorsDS"; + // + // AuthorsTableAdapter + // + this->AuthorsTableAdapter->ClearBeforeFill = true; + // + // bnCommit + // + this->bnCommit->Location = System::Drawing::Point(120, 238); + this->bnCommit->Name = L"bnCommit"; + this->bnCommit->Size = System::Drawing::Size(75, 23); + this->bnCommit->TabIndex = 1; + this->bnCommit->Text = L"Commit"; + this->bnCommit->UseVisualStyleBackColor = true; + this->bnCommit->Click += gcnew System::EventHandler(this, &Form1::bnCommit_Click); + // + // bnRollback + // + this->bnRollback->Location = System::Drawing::Point(225, 238); + this->bnRollback->Name = L"bnRollback"; + this->bnRollback->Size = System::Drawing::Size(75, 23); + this->bnRollback->TabIndex = 2; + this->bnRollback->Text = L"Rollback"; + this->bnRollback->UseVisualStyleBackColor = true; + this->bnRollback->Click += gcnew System::EventHandler(this, &Form1::bnRollback_Click); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(423, 273); + this->Controls->Add(this->bnRollback); + this->Controls->Add(this->bnCommit); + this->Controls->Add(this->dataGridView1); + this->Name = L"Form1"; + this->Text = L"Maintain Authors using a DataGridView"; + this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); + (cli::safe_cast(this->dataGridView1))->EndInit(); + (cli::safe_cast(this->authorsDSBindingSource))->EndInit(); + (cli::safe_cast(this->AuthorsDS))->EndInit(); + this->ResumeLayout(false); + + } + +#pragma endregion + + private: + System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) + { + this->AuthorsTableAdapter->Fill(this->AuthorsDS->Authors); + } + + System::Void bnCommit_Click(System::Object^ sender, System::EventArgs^ e) + { + this->AuthorsTableAdapter->Update(this->AuthorsDS->Authors); + this->AuthorsDS->AcceptChanges(); + } + + System::Void bnRollback_Click(System::Object^ sender, System::EventArgs^ e) + { + this->AuthorsDS->RejectChanges(); + } + }; +} + diff --git a/Chapter12/MaintAuthorsDGV/Form1.resx b/Chapter12/MaintAuthorsDGV/Form1.resx new file mode 100644 index 0000000..bade238 --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/Form1.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 121, 17 + + + 17, 17 + + + 295, 17 + + \ No newline at end of file diff --git a/Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.cpp b/Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.cpp new file mode 100644 index 0000000..ee3596e --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.cpp @@ -0,0 +1,16 @@ +// MaintAuthorsDGV.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace MaintAuthorsDGV; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.vcproj b/Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.vcproj new file mode 100644 index 0000000..2354f8c --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/MaintAuthorsDGV.vcproj @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter12/MaintAuthorsDGV/stdafx.cpp b/Chapter12/MaintAuthorsDGV/stdafx.cpp new file mode 100644 index 0000000..aaec3b5 --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MaintAuthorsDGV.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter12/MaintAuthorsDGV/stdafx.h b/Chapter12/MaintAuthorsDGV/stdafx.h new file mode 100644 index 0000000..3d5f019 --- /dev/null +++ b/Chapter12/MaintAuthorsDGV/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here + +#include "AuthorsDS.h" diff --git a/Chapter12/Transactions/AssemblyInfo.cpp b/Chapter12/Transactions/AssemblyInfo.cpp new file mode 100644 index 0000000..ecf7042 --- /dev/null +++ b/Chapter12/Transactions/AssemblyInfo.cpp @@ -0,0 +1,61 @@ +#using + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("")]; +[assembly:AssemblyCopyrightAttribute("")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter12/Transactions/Transactions.cpp b/Chapter12/Transactions/Transactions.cpp new file mode 100644 index 0000000..91ba6bf --- /dev/null +++ b/Chapter12/Transactions/Transactions.cpp @@ -0,0 +1,86 @@ +#using +#using + +using namespace System; +using namespace System::Data; +using namespace System::Data::SqlClient; + +void main() +{ + String ^Name = "Doors"; + + SqlConnection ^connection = gcnew SqlConnection(); + SqlTransaction ^transaction; + +#ifdef SQLAuth + // SQL Server authentication + connection->ConnectionString = + "User ID=sa; Password=;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#else + // Windows Integrated Security + connection->ConnectionString = + "Persist Security Info=False; Integrated Security=SSPI;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#endif + + try + { + connection->Open(); + + SqlCommand ^cmd = gcnew SqlCommand(); + + transaction = connection->BeginTransaction( + IsolationLevel::Serializable, "AuthorTransaction"); + + cmd->Connection = connection; + cmd->Transaction = transaction; + + cmd->CommandType = CommandType::StoredProcedure; + cmd->CommandText = "InsertAuthor"; + + cmd->Parameters->Add(gcnew SqlParameter("@LastName", SqlDbType::Char,32)); + cmd->Parameters->Add(gcnew SqlParameter("@FirstName",SqlDbType::Char,32)); + + cmd->Parameters["@LastName"]->Value = "Dope"; + cmd->Parameters["@FirstName"]->Value = "John"; + + int affected = cmd->ExecuteNonQuery(); + if (affected <= 0) + throw gcnew Exception("Insert Failed"); + Console::WriteLine("Insert - {0} rows are affected", affected); + + cmd->CommandType = CommandType::Text; + cmd->CommandText = "UPDATE Authors SET LastName = 'Doe'" + "WHERE LastName = 'Dope'"; + + affected = cmd->ExecuteNonQuery(); + if (affected <= 0) + throw gcnew Exception("Insert Failed"); + Console::WriteLine("Update - {0} rows are affected", affected); + + // This transaction will return 0 affected rows + // because "Does" does not exist. + // Thus, the if condition throws an execption which causes all + // Transactions to be rolled back. + cmd->CommandType = CommandType::Text; + cmd->CommandText = "DELETE FROM Authors WHERE LastName = 'Does'"; + + affected = cmd->ExecuteNonQuery(); + if (affected <= 0) + throw gcnew Exception("Insert Failed"); + Console::WriteLine("Delete - {0} rows are affected", affected); + + transaction->Commit(); + } + catch (Exception ^e) + { + transaction->Rollback("AuthorTransaction"); + Console::WriteLine("Transaction Not completed"); + Console::WriteLine("SQL error occurred: {0}", e->Message); + } + finally + { + connection->Close(); + } +} \ No newline at end of file diff --git a/Chapter12/Transactions/Transactions.vcproj b/Chapter12/Transactions/Transactions.vcproj new file mode 100644 index 0000000..5384e8f --- /dev/null +++ b/Chapter12/Transactions/Transactions.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/ADONET/ADONET.cpp b/Chapter13/ADONET/ADONET.cpp new file mode 100644 index 0000000..0f5a1c3 --- /dev/null +++ b/Chapter13/ADONET/ADONET.cpp @@ -0,0 +1,72 @@ +#using +#using + +using namespace System; +using namespace System::Data; +using namespace System::Data::SqlClient; +using namespace System::Xml; + +String ^indent(int depth) +{ + String ^ind = ""; + return ind->PadLeft(depth*4, ' '); +} + +void Navigate(XmlNode ^node, int depth) +{ + if (node == nullptr) + return; + + Console::WriteLine("{0}: Name='{1}' Value='{2}'", + String::Concat(indent(depth),node->NodeType.ToString()), + node->Name, node->Value); + + if (node->Attributes != nullptr) + { + for (int i = 0; i < node->Attributes->Count; i++) + { + Console::WriteLine("{0}Attribute: Name='{1}' Value='{2}'", + indent(depth+1),node->Attributes[i]->Name, + node->Attributes[i]->Value); + } + } + + Navigate(node->FirstChild, depth+1); + Navigate(node->NextSibling, depth); +} + + +void main() +{ + XmlDocument ^doc = gcnew XmlDocument(); + + try + { + SqlConnection ^connect = gcnew SqlConnection(); + +#ifdef SQLAuth + // SQL Server authentication + connect->ConnectionString = + "User ID=sa; Password=;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#else + // Windows Integrated Security + connect->ConnectionString = + "Persist Security Info=False; Integrated Security=SSPI;" + "Data Source=(local); Initial Catalog=DCV_DB;"; +#endif + SqlDataAdapter ^dAdapt = gcnew SqlDataAdapter(); + DataSet ^dSet = gcnew DataSet(); + dAdapt->SelectCommand = gcnew SqlCommand("SELECT * FROM Authors", connect); + + dAdapt->Fill(dSet, "Authors"); + XmlDataDocument ^doc = gcnew XmlDataDocument(dSet); + + // Recursive navigation of the DOM tree + Navigate(doc->DocumentElement, 0); + } + catch (Exception ^e) + { + Console::WriteLine("Error Occurred: {0}", e->Message); + } +} \ No newline at end of file diff --git a/Chapter13/ADONET/ADONET.vcproj b/Chapter13/ADONET/ADONET.vcproj new file mode 100644 index 0000000..486023d --- /dev/null +++ b/Chapter13/ADONET/ADONET.vcproj @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/Chapter13.sln b/Chapter13/Chapter13.sln new file mode 100644 index 0000000..a47a170 --- /dev/null +++ b/Chapter13/Chapter13.sln @@ -0,0 +1,74 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReadXML", "ReadXML\ReadXML.vcproj", "{D00271E6-BDAF-4E82-879A-5BC30AA0CA45}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WriteXML", "WriteXML\WriteXML.vcproj", "{314A147C-FF24-4F95-B3F7-D2F953620D1D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ValidateXML", "ValidateXML\ValidateXML.vcproj", "{882E402F-CC5E-40B1-A10C-86AA940CF753}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UpdateXML", "UpdateXML\UpdateXML.vcproj", "{EF8C3541-9E23-4E87-B18C-BF6DE184BEFC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReadXMLDOM", "ReadXMLDOM\ReadXMLDOM.vcproj", "{BBBC1AAF-2CC1-4A2D-9AFB-DFAD1C7880BE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UpdateXMLDOM", "UpdateXMLDOM\UpdateXMLDOM.vcproj", "{29A75193-75C6-4DCA-A4AD-7DDC5E8F8A67}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WriteXMLDOM", "WriteXMLDOM\WriteXMLDOM.vcproj", "{BDFE0437-F82D-4122-8300-EDA6AE18B1CE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReadXPathNav", "ReadXPathNav\ReadXPathNav.vcproj", "{6A038BFE-BBEB-4A71-B1CB-219CA2A6820F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XPathEx", "XPathEx\XPathEx.vcproj", "{1B8BF33C-B38F-4D07-8316-D94A4BA63904}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ADONET", "ADONET\ADONET.vcproj", "{51028C21-628E-4C21-B7A1-AEC200038428}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D00271E6-BDAF-4E82-879A-5BC30AA0CA45}.Debug|Win32.ActiveCfg = Debug|Win32 + {D00271E6-BDAF-4E82-879A-5BC30AA0CA45}.Debug|Win32.Build.0 = Debug|Win32 + {D00271E6-BDAF-4E82-879A-5BC30AA0CA45}.Release|Win32.ActiveCfg = Release|Win32 + {D00271E6-BDAF-4E82-879A-5BC30AA0CA45}.Release|Win32.Build.0 = Release|Win32 + {314A147C-FF24-4F95-B3F7-D2F953620D1D}.Debug|Win32.ActiveCfg = Debug|Win32 + {314A147C-FF24-4F95-B3F7-D2F953620D1D}.Debug|Win32.Build.0 = Debug|Win32 + {314A147C-FF24-4F95-B3F7-D2F953620D1D}.Release|Win32.ActiveCfg = Release|Win32 + {314A147C-FF24-4F95-B3F7-D2F953620D1D}.Release|Win32.Build.0 = Release|Win32 + {882E402F-CC5E-40B1-A10C-86AA940CF753}.Debug|Win32.ActiveCfg = Debug|Win32 + {882E402F-CC5E-40B1-A10C-86AA940CF753}.Debug|Win32.Build.0 = Debug|Win32 + {882E402F-CC5E-40B1-A10C-86AA940CF753}.Release|Win32.ActiveCfg = Release|Win32 + {882E402F-CC5E-40B1-A10C-86AA940CF753}.Release|Win32.Build.0 = Release|Win32 + {EF8C3541-9E23-4E87-B18C-BF6DE184BEFC}.Debug|Win32.ActiveCfg = Debug|Win32 + {EF8C3541-9E23-4E87-B18C-BF6DE184BEFC}.Debug|Win32.Build.0 = Debug|Win32 + {EF8C3541-9E23-4E87-B18C-BF6DE184BEFC}.Release|Win32.ActiveCfg = Release|Win32 + {EF8C3541-9E23-4E87-B18C-BF6DE184BEFC}.Release|Win32.Build.0 = Release|Win32 + {BBBC1AAF-2CC1-4A2D-9AFB-DFAD1C7880BE}.Debug|Win32.ActiveCfg = Debug|Win32 + {BBBC1AAF-2CC1-4A2D-9AFB-DFAD1C7880BE}.Debug|Win32.Build.0 = Debug|Win32 + {BBBC1AAF-2CC1-4A2D-9AFB-DFAD1C7880BE}.Release|Win32.ActiveCfg = Release|Win32 + {BBBC1AAF-2CC1-4A2D-9AFB-DFAD1C7880BE}.Release|Win32.Build.0 = Release|Win32 + {29A75193-75C6-4DCA-A4AD-7DDC5E8F8A67}.Debug|Win32.ActiveCfg = Debug|Win32 + {29A75193-75C6-4DCA-A4AD-7DDC5E8F8A67}.Debug|Win32.Build.0 = Debug|Win32 + {29A75193-75C6-4DCA-A4AD-7DDC5E8F8A67}.Release|Win32.ActiveCfg = Release|Win32 + {29A75193-75C6-4DCA-A4AD-7DDC5E8F8A67}.Release|Win32.Build.0 = Release|Win32 + {BDFE0437-F82D-4122-8300-EDA6AE18B1CE}.Debug|Win32.ActiveCfg = Debug|Win32 + {BDFE0437-F82D-4122-8300-EDA6AE18B1CE}.Debug|Win32.Build.0 = Debug|Win32 + {BDFE0437-F82D-4122-8300-EDA6AE18B1CE}.Release|Win32.ActiveCfg = Release|Win32 + {BDFE0437-F82D-4122-8300-EDA6AE18B1CE}.Release|Win32.Build.0 = Release|Win32 + {6A038BFE-BBEB-4A71-B1CB-219CA2A6820F}.Debug|Win32.ActiveCfg = Debug|Win32 + {6A038BFE-BBEB-4A71-B1CB-219CA2A6820F}.Debug|Win32.Build.0 = Debug|Win32 + {6A038BFE-BBEB-4A71-B1CB-219CA2A6820F}.Release|Win32.ActiveCfg = Release|Win32 + {6A038BFE-BBEB-4A71-B1CB-219CA2A6820F}.Release|Win32.Build.0 = Release|Win32 + {1B8BF33C-B38F-4D07-8316-D94A4BA63904}.Debug|Win32.ActiveCfg = Debug|Win32 + {1B8BF33C-B38F-4D07-8316-D94A4BA63904}.Debug|Win32.Build.0 = Debug|Win32 + {1B8BF33C-B38F-4D07-8316-D94A4BA63904}.Release|Win32.ActiveCfg = Release|Win32 + {1B8BF33C-B38F-4D07-8316-D94A4BA63904}.Release|Win32.Build.0 = Release|Win32 + {51028C21-628E-4C21-B7A1-AEC200038428}.Debug|Win32.ActiveCfg = Debug|Win32 + {51028C21-628E-4C21-B7A1-AEC200038428}.Debug|Win32.Build.0 = Debug|Win32 + {51028C21-628E-4C21-B7A1-AEC200038428}.Release|Win32.ActiveCfg = Release|Win32 + {51028C21-628E-4C21-B7A1-AEC200038428}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter13/Chapter13.suo b/Chapter13/Chapter13.suo new file mode 100644 index 0000000000000000000000000000000000000000..aeddcb3b82aa19b3b89ff5bacef3dd6dfdb8f4dc GIT binary patch literal 30208 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 ANdN!< literal 0 HcmV?d00001 diff --git a/Chapter13/ReadXML/Monsters.xml b/Chapter13/ReadXML/Monsters.xml new file mode 100644 index 0000000..f7568a5 --- /dev/null +++ b/Chapter13/ReadXML/Monsters.xml @@ -0,0 +1,25 @@ + + + + + + Goblin + + Dagger + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/ReadXML/ReadXML.cpp b/Chapter13/ReadXML/ReadXML.cpp new file mode 100644 index 0000000..c521114 --- /dev/null +++ b/Chapter13/ReadXML/ReadXML.cpp @@ -0,0 +1,106 @@ +#using + +using namespace System; +using namespace System::Xml; + + +String ^indent(Int32 depth) +{ + String ^ind = ""; + return ind->PadLeft(depth*3, ' '); +} + +void main() +{ + XmlReader ^reader; + + try + { + reader = XmlReader::Create("Monsters.xml"); + + while (reader->Read()) + { + switch (reader->NodeType) + { + case XmlNodeType::Comment: + Console::WriteLine( + "{0}Comment node: Value='{1}'", + indent(reader->Depth), reader->Value); + break; + case XmlNodeType::Element: + Console::WriteLine( + "{0}Element node: Name='{1}'", + indent(reader->Depth), reader->Name); + + if (reader->HasAttributes) + { + while (reader->MoveToNextAttribute()) + { + Console::WriteLine( + "{0}Attribute node: Name='{1}' Value='{2}'", + indent(reader->Depth), reader->Name, + reader->Value); + } + reader->MoveToElement(); + } + + if (reader->IsEmptyElement) + { + Console::WriteLine( + "{0}End Element node: Name='{1}'", + indent(reader->Depth), reader->Name); + } + break; + case XmlNodeType::EndElement: + Console::WriteLine( + "{0}End Element node: Name='{1}'", + indent(reader->Depth), reader->Name); + break; + case XmlNodeType::Text: + Console::WriteLine( + "{0}Text node: Value='{1}'", + indent(reader->Depth), reader->Value); + break; + case XmlNodeType::XmlDeclaration: + Console::WriteLine( + "Xml Declaration node: Name='{1}'", + indent(reader->Depth), reader->Name); + + if (reader->HasAttributes) + { + while (reader->MoveToNextAttribute()) + { + Console::WriteLine( + "{0}Attribute node: Name='{1}' Value='{2}'", + indent(reader->Depth), reader->Name, + reader->Value); + } + } + reader->MoveToElement(); + Console::WriteLine( + "End Xml Declaration node: Name='{1}'", + indent(reader->Depth), reader->Name); + break; + case XmlNodeType::Whitespace: + // Ignore white space + break; + default: + Console::WriteLine( + "***UKNOWN*** node: Name='{1}' Value='{2}'", + indent(reader->Depth), reader->Name, reader->Value); + } + } + } + catch (XmlException ^e) + { + Console::WriteLine("\nReadXML Aborted with error: {0}", + e->Message); + } + finally + { + if (reader->ReadState != ReadState::Closed) + { + reader->Close(); + } + } +} \ No newline at end of file diff --git a/Chapter13/ReadXML/ReadXML.vcproj b/Chapter13/ReadXML/ReadXML.vcproj new file mode 100644 index 0000000..ced7c00 --- /dev/null +++ b/Chapter13/ReadXML/ReadXML.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/ReadXMLDOM/Monsters.xml b/Chapter13/ReadXMLDOM/Monsters.xml new file mode 100644 index 0000000..f7568a5 --- /dev/null +++ b/Chapter13/ReadXMLDOM/Monsters.xml @@ -0,0 +1,25 @@ + + + + + + Goblin + + Dagger + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/ReadXMLDOM/ReadXMLDOM.cpp b/Chapter13/ReadXMLDOM/ReadXMLDOM.cpp new file mode 100644 index 0000000..eb0d945 --- /dev/null +++ b/Chapter13/ReadXMLDOM/ReadXMLDOM.cpp @@ -0,0 +1,53 @@ +using namespace System; +using namespace System::Xml; + +String ^indent(int depth) +{ + String ^ind = ""; + return ind->PadLeft(depth*4, ' '); +} + +void Navigate(XmlNode ^node, int depth) +{ + if (node == nullptr) + return; + + Console::WriteLine("{0}: Name='{1}' Value='{2}'", + String::Concat(indent(depth),node->NodeType.ToString()), + node->Name, node->Value); + + if (node->Attributes != nullptr) + { + for (int i = 0; i < node->Attributes->Count; i++) + { + Console::WriteLine("{0}Attribute: Name='{1}' Value='{2}'", + indent(depth+1),node->Attributes[i]->Name, + node->Attributes[i]->Value); + } + } + + Navigate(node->FirstChild, depth+1); + Navigate(node->NextSibling, depth); +} + + +void main() +{ + XmlDocument ^doc = gcnew XmlDocument(); + + try + { + XmlReader ^reader = XmlReader::Create("Monsters.xml"); + doc->Load(reader); + reader->Close(); + + XmlNode ^node = doc->FirstChild; // I want the Xml Declaration + + // Recursive navigation of the DOM tree + Navigate(node, 0); + } + catch (Exception ^e) + { + Console::WriteLine("Error Occurred: {0}", e->Message); + } +} \ No newline at end of file diff --git a/Chapter13/ReadXMLDOM/ReadXMLDOM.vcproj b/Chapter13/ReadXMLDOM/ReadXMLDOM.vcproj new file mode 100644 index 0000000..6bf4291 --- /dev/null +++ b/Chapter13/ReadXMLDOM/ReadXMLDOM.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/ReadXPathNav/Monsters.xml b/Chapter13/ReadXPathNav/Monsters.xml new file mode 100644 index 0000000..f7568a5 --- /dev/null +++ b/Chapter13/ReadXPathNav/Monsters.xml @@ -0,0 +1,25 @@ + + + + + + Goblin + + Dagger + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/ReadXPathNav/ReadXPathNav.cpp b/Chapter13/ReadXPathNav/ReadXPathNav.cpp new file mode 100644 index 0000000..59e8c45 --- /dev/null +++ b/Chapter13/ReadXPathNav/ReadXPathNav.cpp @@ -0,0 +1,51 @@ +using namespace System; +using namespace System::Xml; +using namespace System::Xml::XPath; + +String ^indent(int depth) +{ + String ^ind = ""; + return ind->PadLeft(depth*4, ' '); +} + +void Navigate(XPathNavigator ^nav, int depth) +{ + Console::WriteLine("{0}: Name='{1}' Value='{2}'", + String::Concat(indent(depth), nav->NodeType.ToString()), + nav->Name, nav->Value); + + if (nav->HasAttributes) + { + nav->MoveToFirstAttribute(); + do { + Console::WriteLine("{0} Attribute: Name='{1}' Value='{2}'", + indent(depth+1),nav->Name, nav->Value); + } + while(nav->MoveToNextAttribute()); + nav->MoveToParent(); + } + + if (nav->MoveToFirstChild()) + { + Navigate(nav, depth+1); + nav->MoveToParent(); + } + if (nav->MoveToNext()) + Navigate(nav, depth); +} + +void main() +{ + XmlDocument ^doc = gcnew XmlDocument(); + try + { + doc->Load("Monsters.xml"); + XPathNavigator ^nav = doc->CreateNavigator(); + nav->MoveToRoot(); + Navigate(nav, 0); + } + catch (Exception ^e) + { + Console::WriteLine("Error Occurred: {0}", e->Message); + } +} \ No newline at end of file diff --git a/Chapter13/ReadXPathNav/ReadXPathNav.vcproj b/Chapter13/ReadXPathNav/ReadXPathNav.vcproj new file mode 100644 index 0000000..9bc2b61 --- /dev/null +++ b/Chapter13/ReadXPathNav/ReadXPathNav.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/UpdateXML/Monsters.xml b/Chapter13/UpdateXML/Monsters.xml new file mode 100644 index 0000000..f7568a5 --- /dev/null +++ b/Chapter13/UpdateXML/Monsters.xml @@ -0,0 +1,25 @@ + + + + + + Goblin + + Dagger + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/UpdateXML/New_Monsters.xml b/Chapter13/UpdateXML/New_Monsters.xml new file mode 100644 index 0000000..e7081ef --- /dev/null +++ b/Chapter13/UpdateXML/New_Monsters.xml @@ -0,0 +1,28 @@ + + + + + + Goblin + False + + Dagger + + + + Succubus + False + + Claw + Dagger + + + + Red Dragon + False + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/UpdateXML/UpdateXML.cpp b/Chapter13/UpdateXML/UpdateXML.cpp new file mode 100644 index 0000000..76ab82c --- /dev/null +++ b/Chapter13/UpdateXML/UpdateXML.cpp @@ -0,0 +1,69 @@ +using namespace System; +using namespace System::Xml; + +void main() +{ + XmlReader ^reader; + XmlWriter ^writer; + try + { + reader = XmlReader::Create("Monsters.xml"); + + XmlWriterSettings ^settings = gcnew XmlWriterSettings(); + settings->Indent = true; + settings->IndentChars = (" "); + + writer = XmlWriter::Create("New_Monsters.xml", settings); + + while (reader->Read()) + { + switch (reader->NodeType) + { + case XmlNodeType::Comment: + writer->WriteComment(reader->Value); + break; + case XmlNodeType::Element: + writer->WriteStartElement(reader->Name); + writer->WriteAttributes(reader, false); + if (reader->IsEmptyElement) + writer->WriteEndElement(); + break; + case XmlNodeType::EndElement: + writer->WriteEndElement(); + + // *** Add new Monster Element + if (reader->Name->Equals("Name")) + { + writer->WriteStartElement("Encountered"); + writer->WriteString("False"); + writer->WriteEndElement(); + } + break; + case XmlNodeType::Text: + writer->WriteString(reader->Value); + break; + case XmlNodeType::XmlDeclaration: + writer->WriteStartDocument(); + break; + } + } + writer->Flush(); + + Console::WriteLine("Done"); + } + catch (Exception ^e) + { + Console::WriteLine("XML Update Aborted -- {0}", e->Message); + } + finally + { + if (writer->WriteState != WriteState::Closed) + { + writer->Close(); + } + if (reader->ReadState != ReadState::Closed) + { + reader->Close(); + } + } +} diff --git a/Chapter13/UpdateXML/UpdateXML.vcproj b/Chapter13/UpdateXML/UpdateXML.vcproj new file mode 100644 index 0000000..7b93263 --- /dev/null +++ b/Chapter13/UpdateXML/UpdateXML.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/UpdateXMLDOM/Monsters.xml b/Chapter13/UpdateXMLDOM/Monsters.xml new file mode 100644 index 0000000..f7568a5 --- /dev/null +++ b/Chapter13/UpdateXMLDOM/Monsters.xml @@ -0,0 +1,25 @@ + + + + + + Goblin + + Dagger + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/UpdateXMLDOM/New_Monsters.xml b/Chapter13/UpdateXMLDOM/New_Monsters.xml new file mode 100644 index 0000000..9f7ed70 --- /dev/null +++ b/Chapter13/UpdateXMLDOM/New_Monsters.xml @@ -0,0 +1,25 @@ + + + + + + Goblin + + Saber + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/UpdateXMLDOM/UpdateXMLDOM.cpp b/Chapter13/UpdateXMLDOM/UpdateXMLDOM.cpp new file mode 100644 index 0000000..c217df7 --- /dev/null +++ b/Chapter13/UpdateXMLDOM/UpdateXMLDOM.cpp @@ -0,0 +1,42 @@ +using namespace System; +using namespace System::Xml; + +void Navigate(XmlNode ^node) +{ + if (node == nullptr) + return; + + if (node->Value != nullptr && node->Value->Equals("Dagger")) + { + if (node->ParentNode->ParentNode["Name"]->FirstChild->Value-> + Equals("Goblin")) + { + node->Value = "Saber"; + node->ParentNode->Attributes["Damage"]->Value = "1d8"; + } + } + + Navigate(node->FirstChild); + Navigate(node->NextSibling); +} + + +void main() +{ + XmlDocument ^doc = gcnew XmlDocument(); + + try + { + doc->Load("Monsters.xml"); + XmlNode ^root = doc->DocumentElement; + + // Recursive navigation of the DOM tree + Navigate(root); + + doc->Save("New_Monsters.xml"); + } + catch (Exception ^e) + { + Console::WriteLine("Error Occurred: {0}", e->Message ); + } +} \ No newline at end of file diff --git a/Chapter13/UpdateXMLDOM/UpdateXMLDOM.vcproj b/Chapter13/UpdateXMLDOM/UpdateXMLDOM.vcproj new file mode 100644 index 0000000..7379d35 --- /dev/null +++ b/Chapter13/UpdateXMLDOM/UpdateXMLDOM.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/ValidateXML/Monsters.dtd b/Chapter13/ValidateXML/Monsters.dtd new file mode 100644 index 0000000..6cb7f27 --- /dev/null +++ b/Chapter13/ValidateXML/Monsters.dtd @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Chapter13/ValidateXML/Monsters.h b/Chapter13/ValidateXML/Monsters.h new file mode 100644 index 0000000..2a4c7fc --- /dev/null +++ b/Chapter13/ValidateXML/Monsters.h @@ -0,0 +1,1533 @@ +#pragma once + +#using +#using +#using +#using + +using namespace System::Security::Permissions; +[assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum, SkipVerification=false)]; +// +// This source code was auto-generated by xsd, Version=2.0.50630.0. +// +namespace ValidateXML { + using namespace System; + + using namespace System; + ref class MonsterList; + + + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0"), + Serializable, + System::ComponentModel::DesignerCategoryAttribute(L"code"), + System::ComponentModel::ToolboxItem(true), + System::Xml::Serialization::XmlSchemaProviderAttribute(L"GetTypedDataSetSchema"), + System::Xml::Serialization::XmlRootAttribute(L"MonsterList"), + System::ComponentModel::Design::HelpKeywordAttribute(L"vs.data.DataSet"), + System::CLSCompliantAttribute(false)] + public ref class MonsterList : public System::Data::DataSet { + public : ref class MonsterDataTable; + public : ref class HitDiceDataTable; + public : ref class WeaponDataTable; + public : ref class MonsterRow; + public : ref class HitDiceRow; + public : ref class WeaponRow; + public : ref class MonsterRowChangeEvent; + public : ref class HitDiceRowChangeEvent; + public : ref class WeaponRowChangeEvent; + + private: ValidateXML::MonsterList::MonsterDataTable^ tableMonster; + + private: ValidateXML::MonsterList::HitDiceDataTable^ tableHitDice; + + private: ValidateXML::MonsterList::WeaponDataTable^ tableWeapon; + + private: System::Data::DataRelation^ relationMonster_HitDice; + + private: System::Data::DataRelation^ relationMonster_Weapon; + + private: System::Data::SchemaSerializationMode _schemaSerializationMode; + + public : delegate System::Void MonsterRowChangeEventHandler(System::Object^ sender, ValidateXML::MonsterList::MonsterRowChangeEvent^ e); + + public : delegate System::Void HitDiceRowChangeEventHandler(System::Object^ sender, ValidateXML::MonsterList::HitDiceRowChangeEvent^ e); + + public : delegate System::Void WeaponRowChangeEventHandler(System::Object^ sender, ValidateXML::MonsterList::WeaponRowChangeEvent^ e); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MonsterList(); + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MonsterList(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::Browsable(false), + System::ComponentModel::DesignerSerializationVisibility(System::ComponentModel::DesignerSerializationVisibility::Content)] + property ValidateXML::MonsterList::MonsterDataTable^ Monster { + ValidateXML::MonsterList::MonsterDataTable^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::Browsable(false), + System::ComponentModel::DesignerSerializationVisibility(System::ComponentModel::DesignerSerializationVisibility::Content)] + property ValidateXML::MonsterList::HitDiceDataTable^ HitDice { + ValidateXML::MonsterList::HitDiceDataTable^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::Browsable(false), + System::ComponentModel::DesignerSerializationVisibility(System::ComponentModel::DesignerSerializationVisibility::Content)] + property ValidateXML::MonsterList::WeaponDataTable^ Weapon { + ValidateXML::MonsterList::WeaponDataTable^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual property System::Data::SchemaSerializationMode SchemaSerializationMode { + System::Data::SchemaSerializationMode get() override; + System::Void set(System::Data::SchemaSerializationMode value) override; + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::DesignerSerializationVisibilityAttribute(System::ComponentModel::DesignerSerializationVisibility::Hidden)] + property System::Data::DataTableCollection^ Tables { + System::Data::DataTableCollection^ get() new; + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::DesignerSerializationVisibilityAttribute(System::ComponentModel::DesignerSerializationVisibility::Hidden)] + property System::Data::DataRelationCollection^ Relations { + System::Data::DataRelationCollection^ get() new; + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::DefaultValueAttribute(true)] + property System::Boolean EnforceConstraints { + System::Boolean get() new; + System::Void set(System::Boolean value) new; + } + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void InitializeDerivedDataSet() override; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataSet^ Clone() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Boolean ShouldSerializeTables() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Boolean ShouldSerializeRelations() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void ReadXmlSerializable(System::Xml::XmlReader^ reader) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Xml::Schema::XmlSchema^ GetSchemaSerializable() override; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitVars(); + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitVars(System::Boolean initTable); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitClass(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Boolean ShouldSerializeMonster(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Boolean ShouldSerializeHitDice(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Boolean ShouldSerializeWeapon(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void SchemaChanged(System::Object^ sender, System::ComponentModel::CollectionChangeEventArgs^ e); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + static System::Xml::Schema::XmlSchemaComplexType^ GetTypedDataSetSchema(System::Xml::Schema::XmlSchemaSet^ xs); + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0"), + System::Serializable, + System::Xml::Serialization::XmlSchemaProviderAttribute(L"GetTypedTableSchema")] + ref class MonsterDataTable : public System::Data::DataTable, public System::Collections::IEnumerable { + + private: System::Data::DataColumn^ columnName; + + private: System::Data::DataColumn^ columnMonster_Id; + + public: event ValidateXML::MonsterList::MonsterRowChangeEventHandler^ MonsterRowChanging; + + public: event ValidateXML::MonsterList::MonsterRowChangeEventHandler^ MonsterRowChanged; + + public: event ValidateXML::MonsterList::MonsterRowChangeEventHandler^ MonsterRowDeleting; + + public: event ValidateXML::MonsterList::MonsterRowChangeEventHandler^ MonsterRowDeleted; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MonsterDataTable(); + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MonsterDataTable(System::Data::DataTable^ table); + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MonsterDataTable(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ NameColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ Monster_IdColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::Browsable(false)] + property System::Int32 Count { + System::Int32 get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property ValidateXML::MonsterList::MonsterRow^ default [System::Int32 ] { + ValidateXML::MonsterList::MonsterRow^ get(System::Int32 index); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void AddMonsterRow(ValidateXML::MonsterList::MonsterRow^ row); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + ValidateXML::MonsterList::MonsterRow^ AddMonsterRow(System::String^ Name); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Collections::IEnumerator^ GetEnumerator(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataTable^ Clone() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataTable^ CreateInstance() override; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitVars(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitClass(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + ValidateXML::MonsterList::MonsterRow^ NewMonsterRow(); + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataRow^ NewRowFromBuilder(System::Data::DataRowBuilder^ builder) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Type^ GetRowType() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowChanged(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowChanging(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowDeleted(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowDeleting(System::Data::DataRowChangeEventArgs^ e) override; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void RemoveMonsterRow(ValidateXML::MonsterList::MonsterRow^ row); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + static System::Xml::Schema::XmlSchemaComplexType^ GetTypedTableSchema(System::Xml::Schema::XmlSchemaSet^ xs); + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0"), + System::Serializable, + System::Xml::Serialization::XmlSchemaProviderAttribute(L"GetTypedTableSchema")] + ref class HitDiceDataTable : public System::Data::DataTable, public System::Collections::IEnumerable { + + private: System::Data::DataColumn^ columnDice; + + private: System::Data::DataColumn^ columnDefault; + + private: System::Data::DataColumn^ columnMonster_Id; + + public: event ValidateXML::MonsterList::HitDiceRowChangeEventHandler^ HitDiceRowChanging; + + public: event ValidateXML::MonsterList::HitDiceRowChangeEventHandler^ HitDiceRowChanged; + + public: event ValidateXML::MonsterList::HitDiceRowChangeEventHandler^ HitDiceRowDeleting; + + public: event ValidateXML::MonsterList::HitDiceRowChangeEventHandler^ HitDiceRowDeleted; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + HitDiceDataTable(); + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + HitDiceDataTable(System::Data::DataTable^ table); + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + HitDiceDataTable(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ DiceColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ DefaultColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ Monster_IdColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::Browsable(false)] + property System::Int32 Count { + System::Int32 get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property ValidateXML::MonsterList::HitDiceRow^ default [System::Int32 ] { + ValidateXML::MonsterList::HitDiceRow^ get(System::Int32 index); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void AddHitDiceRow(ValidateXML::MonsterList::HitDiceRow^ row); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + ValidateXML::MonsterList::HitDiceRow^ AddHitDiceRow(System::String^ Dice, System::Byte Default, ValidateXML::MonsterList::MonsterRow^ parentMonsterRowByMonster_HitDice); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Collections::IEnumerator^ GetEnumerator(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataTable^ Clone() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataTable^ CreateInstance() override; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitVars(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitClass(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + ValidateXML::MonsterList::HitDiceRow^ NewHitDiceRow(); + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataRow^ NewRowFromBuilder(System::Data::DataRowBuilder^ builder) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Type^ GetRowType() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowChanged(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowChanging(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowDeleted(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowDeleting(System::Data::DataRowChangeEventArgs^ e) override; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void RemoveHitDiceRow(ValidateXML::MonsterList::HitDiceRow^ row); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + static System::Xml::Schema::XmlSchemaComplexType^ GetTypedTableSchema(System::Xml::Schema::XmlSchemaSet^ xs); + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0"), + System::Serializable, + System::Xml::Serialization::XmlSchemaProviderAttribute(L"GetTypedTableSchema")] + ref class WeaponDataTable : public System::Data::DataTable, public System::Collections::IEnumerable { + + private: System::Data::DataColumn^ columnNumber; + + private: System::Data::DataColumn^ columnDamage; + + private: System::Data::DataColumn^ columnWeapon_text; + + private: System::Data::DataColumn^ columnMonster_Id; + + public: event ValidateXML::MonsterList::WeaponRowChangeEventHandler^ WeaponRowChanging; + + public: event ValidateXML::MonsterList::WeaponRowChangeEventHandler^ WeaponRowChanged; + + public: event ValidateXML::MonsterList::WeaponRowChangeEventHandler^ WeaponRowDeleting; + + public: event ValidateXML::MonsterList::WeaponRowChangeEventHandler^ WeaponRowDeleted; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + WeaponDataTable(); + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + WeaponDataTable(System::Data::DataTable^ table); + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + WeaponDataTable(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ NumberColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ DamageColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ Weapon_textColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataColumn^ Monster_IdColumn { + System::Data::DataColumn^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute, + System::ComponentModel::Browsable(false)] + property System::Int32 Count { + System::Int32 get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property ValidateXML::MonsterList::WeaponRow^ default [System::Int32 ] { + ValidateXML::MonsterList::WeaponRow^ get(System::Int32 index); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void AddWeaponRow(ValidateXML::MonsterList::WeaponRow^ row); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + ValidateXML::MonsterList::WeaponRow^ AddWeaponRow(System::Byte Number, System::String^ Damage, System::String^ Weapon_text, + ValidateXML::MonsterList::MonsterRow^ parentMonsterRowByMonster_Weapon); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Collections::IEnumerator^ GetEnumerator(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataTable^ Clone() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataTable^ CreateInstance() override; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitVars(); + + private: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void InitClass(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + ValidateXML::MonsterList::WeaponRow^ NewWeaponRow(); + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Data::DataRow^ NewRowFromBuilder(System::Data::DataRowBuilder^ builder) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Type^ GetRowType() override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowChanged(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowChanging(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowDeleted(System::Data::DataRowChangeEventArgs^ e) override; + + protected: [System::Diagnostics::DebuggerNonUserCodeAttribute] + virtual System::Void OnRowDeleting(System::Data::DataRowChangeEventArgs^ e) override; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void RemoveWeaponRow(ValidateXML::MonsterList::WeaponRow^ row); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + static System::Xml::Schema::XmlSchemaComplexType^ GetTypedTableSchema(System::Xml::Schema::XmlSchemaSet^ xs); + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0")] + ref class MonsterRow : public System::Data::DataRow { + + private: ValidateXML::MonsterList::MonsterDataTable^ tableMonster; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MonsterRow(System::Data::DataRowBuilder^ rb); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::String^ Name { + System::String^ get(); + System::Void set(System::String^ value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Int32 Monster_Id { + System::Int32 get(); + System::Void set(System::Int32 value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + cli::array< ValidateXML::MonsterList::HitDiceRow^ >^ GetHitDiceRows(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + cli::array< ValidateXML::MonsterList::WeaponRow^ >^ GetWeaponRows(); + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0")] + ref class HitDiceRow : public System::Data::DataRow { + + private: ValidateXML::MonsterList::HitDiceDataTable^ tableHitDice; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + HitDiceRow(System::Data::DataRowBuilder^ rb); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::String^ Dice { + System::String^ get(); + System::Void set(System::String^ value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Byte Default { + System::Byte get(); + System::Void set(System::Byte value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Int32 Monster_Id { + System::Int32 get(); + System::Void set(System::Int32 value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property ValidateXML::MonsterList::MonsterRow^ MonsterRow { + ValidateXML::MonsterList::MonsterRow^ get(); + System::Void set(ValidateXML::MonsterList::MonsterRow^ value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Boolean IsMonster_IdNull(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void SetMonster_IdNull(); + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0")] + ref class WeaponRow : public System::Data::DataRow { + + private: ValidateXML::MonsterList::WeaponDataTable^ tableWeapon; + + internal: [System::Diagnostics::DebuggerNonUserCodeAttribute] + WeaponRow(System::Data::DataRowBuilder^ rb); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Byte Number { + System::Byte get(); + System::Void set(System::Byte value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::String^ Damage { + System::String^ get(); + System::Void set(System::String^ value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::String^ Weapon_text { + System::String^ get(); + System::Void set(System::String^ value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Int32 Monster_Id { + System::Int32 get(); + System::Void set(System::Int32 value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property ValidateXML::MonsterList::MonsterRow^ MonsterRow { + ValidateXML::MonsterList::MonsterRow^ get(); + System::Void set(ValidateXML::MonsterList::MonsterRow^ value); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Boolean IsMonster_IdNull(); + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + System::Void SetMonster_IdNull(); + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0")] + ref class MonsterRowChangeEvent : public System::EventArgs { + + private: ValidateXML::MonsterList::MonsterRow^ eventRow; + + private: System::Data::DataRowAction eventAction; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + MonsterRowChangeEvent(ValidateXML::MonsterList::MonsterRow^ row, System::Data::DataRowAction action); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property ValidateXML::MonsterList::MonsterRow^ Row { + ValidateXML::MonsterList::MonsterRow^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataRowAction Action { + System::Data::DataRowAction get(); + } + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0")] + ref class HitDiceRowChangeEvent : public System::EventArgs { + + private: ValidateXML::MonsterList::HitDiceRow^ eventRow; + + private: System::Data::DataRowAction eventAction; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + HitDiceRowChangeEvent(ValidateXML::MonsterList::HitDiceRow^ row, System::Data::DataRowAction action); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property ValidateXML::MonsterList::HitDiceRow^ Row { + ValidateXML::MonsterList::HitDiceRow^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataRowAction Action { + System::Data::DataRowAction get(); + } + }; + + public : [System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.Data.Design.TypedDataSetGenerator", L"2.0.0.0")] + ref class WeaponRowChangeEvent : public System::EventArgs { + + private: ValidateXML::MonsterList::WeaponRow^ eventRow; + + private: System::Data::DataRowAction eventAction; + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + WeaponRowChangeEvent(ValidateXML::MonsterList::WeaponRow^ row, System::Data::DataRowAction action); + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property ValidateXML::MonsterList::WeaponRow^ Row { + ValidateXML::MonsterList::WeaponRow^ get(); + } + + public: [System::Diagnostics::DebuggerNonUserCodeAttribute] + property System::Data::DataRowAction Action { + System::Data::DataRowAction get(); + } + }; + }; +} +namespace ValidateXML { + + + inline MonsterList::MonsterList() { + this->BeginInit(); + this->InitClass(); + System::ComponentModel::CollectionChangeEventHandler^ schemaChangedHandler = gcnew System::ComponentModel::CollectionChangeEventHandler(this, &ValidateXML::MonsterList::SchemaChanged); + __super::Tables->CollectionChanged += schemaChangedHandler; + __super::Relations->CollectionChanged += schemaChangedHandler; + this->EndInit(); + } + + inline MonsterList::MonsterList(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context) : + System::Data::DataSet(info, context) { + if (this->IsBinarySerialized(info, context) == true) { + this->InitVars(false); + System::ComponentModel::CollectionChangeEventHandler^ schemaChangedHandler1 = gcnew System::ComponentModel::CollectionChangeEventHandler(this, &ValidateXML::MonsterList::SchemaChanged); + this->Tables->CollectionChanged += schemaChangedHandler1; + this->Relations->CollectionChanged += schemaChangedHandler1; + return; + } + System::String^ strSchema = (cli::safe_cast(info->GetValue(L"XmlSchema", System::String::typeid))); + if (this->DetermineSchemaSerializationMode(info, context) == System::Data::SchemaSerializationMode::IncludeSchema) { + System::Data::DataSet^ ds = (gcnew System::Data::DataSet()); + ds->EnforceConstraints = false; + ds->ReadXmlSchema((gcnew System::Xml::XmlTextReader((gcnew System::IO::StringReader(strSchema))))); + if (ds->Tables[L"Monster"] != nullptr) { + __super::Tables->Add((gcnew ValidateXML::MonsterList::MonsterDataTable(ds->Tables[L"Monster"]))); + } + if (ds->Tables[L"HitDice"] != nullptr) { + __super::Tables->Add((gcnew ValidateXML::MonsterList::HitDiceDataTable(ds->Tables[L"HitDice"]))); + } + if (ds->Tables[L"Weapon"] != nullptr) { + __super::Tables->Add((gcnew ValidateXML::MonsterList::WeaponDataTable(ds->Tables[L"Weapon"]))); + } + this->DataSetName = ds->DataSetName; + this->Prefix = ds->Prefix; + this->Namespace = ds->Namespace; + this->Locale = ds->Locale; + this->CaseSensitive = ds->CaseSensitive; + this->EnforceConstraints = ds->EnforceConstraints; + this->Merge(ds, false, System::Data::MissingSchemaAction::Add); + this->InitVars(); + } + else { + this->ReadXmlSchema((gcnew System::Xml::XmlTextReader((gcnew System::IO::StringReader(strSchema))))); + } + this->GetSerializationData(info, context); + System::ComponentModel::CollectionChangeEventHandler^ schemaChangedHandler = gcnew System::ComponentModel::CollectionChangeEventHandler(this, &ValidateXML::MonsterList::SchemaChanged); + __super::Tables->CollectionChanged += schemaChangedHandler; + this->Relations->CollectionChanged += schemaChangedHandler; + } + + inline ValidateXML::MonsterList::MonsterDataTable^ MonsterList::Monster::get() { + return this->tableMonster; + } + + inline ValidateXML::MonsterList::HitDiceDataTable^ MonsterList::HitDice::get() { + return this->tableHitDice; + } + + inline ValidateXML::MonsterList::WeaponDataTable^ MonsterList::Weapon::get() { + return this->tableWeapon; + } + + inline System::Data::SchemaSerializationMode MonsterList::SchemaSerializationMode::get() { + return this->_schemaSerializationMode; + } + inline System::Void MonsterList::SchemaSerializationMode::set(System::Data::SchemaSerializationMode value) { + this->_schemaSerializationMode = __identifier(value); + } + + inline System::Data::DataTableCollection^ MonsterList::Tables::get() { + return __super::Tables; + } + + inline System::Data::DataRelationCollection^ MonsterList::Relations::get() { + return __super::Relations; + } + + inline System::Boolean MonsterList::EnforceConstraints::get() { + return __super::EnforceConstraints; + } + inline System::Void MonsterList::EnforceConstraints::set(System::Boolean value) { + __super::EnforceConstraints = __identifier(value); + } + + inline System::Void MonsterList::InitializeDerivedDataSet() { + this->BeginInit(); + this->InitClass(); + this->EndInit(); + } + + inline System::Data::DataSet^ MonsterList::Clone() { + ValidateXML::MonsterList^ cln = (cli::safe_cast(__super::Clone())); + cln->InitVars(); + return cln; + } + + inline System::Boolean MonsterList::ShouldSerializeTables() { + return false; + } + + inline System::Boolean MonsterList::ShouldSerializeRelations() { + return false; + } + + inline System::Void MonsterList::ReadXmlSerializable(System::Xml::XmlReader^ reader) { + if (this->DetermineSchemaSerializationMode(reader) == System::Data::SchemaSerializationMode::IncludeSchema) { + this->Reset(); + System::Data::DataSet^ ds = (gcnew System::Data::DataSet()); + ds->ReadXml(reader); + if (ds->Tables[L"Monster"] != nullptr) { + __super::Tables->Add((gcnew ValidateXML::MonsterList::MonsterDataTable(ds->Tables[L"Monster"]))); + } + if (ds->Tables[L"HitDice"] != nullptr) { + __super::Tables->Add((gcnew ValidateXML::MonsterList::HitDiceDataTable(ds->Tables[L"HitDice"]))); + } + if (ds->Tables[L"Weapon"] != nullptr) { + __super::Tables->Add((gcnew ValidateXML::MonsterList::WeaponDataTable(ds->Tables[L"Weapon"]))); + } + this->DataSetName = ds->DataSetName; + this->Prefix = ds->Prefix; + this->Namespace = ds->Namespace; + this->Locale = ds->Locale; + this->CaseSensitive = ds->CaseSensitive; + this->EnforceConstraints = ds->EnforceConstraints; + this->Merge(ds, false, System::Data::MissingSchemaAction::Add); + this->InitVars(); + } + else { + this->ReadXml(reader); + this->InitVars(); + } + } + + inline System::Xml::Schema::XmlSchema^ MonsterList::GetSchemaSerializable() { + System::IO::MemoryStream^ stream = (gcnew System::IO::MemoryStream()); + this->WriteXmlSchema((gcnew System::Xml::XmlTextWriter(stream, nullptr))); + stream->Position = 0; + return System::Xml::Schema::XmlSchema::Read((gcnew System::Xml::XmlTextReader(stream)), nullptr); + } + + inline System::Void MonsterList::InitVars() { + this->InitVars(true); + } + + inline System::Void MonsterList::InitVars(System::Boolean initTable) { + this->tableMonster = (cli::safe_cast(__super::Tables[L"Monster"])); + if (initTable == true) { + if (this->tableMonster != nullptr) { + this->tableMonster->InitVars(); + } + } + this->tableHitDice = (cli::safe_cast(__super::Tables[L"HitDice"])); + if (initTable == true) { + if (this->tableHitDice != nullptr) { + this->tableHitDice->InitVars(); + } + } + this->tableWeapon = (cli::safe_cast(__super::Tables[L"Weapon"])); + if (initTable == true) { + if (this->tableWeapon != nullptr) { + this->tableWeapon->InitVars(); + } + } + this->relationMonster_HitDice = this->Relations[L"Monster_HitDice"]; + this->relationMonster_Weapon = this->Relations[L"Monster_Weapon"]; + } + + inline System::Void MonsterList::InitClass() { + this->DataSetName = L"MonsterList"; + this->Prefix = L""; + this->EnforceConstraints = true; + this->tableMonster = (gcnew ValidateXML::MonsterList::MonsterDataTable()); + __super::Tables->Add(this->tableMonster); + this->tableHitDice = (gcnew ValidateXML::MonsterList::HitDiceDataTable()); + __super::Tables->Add(this->tableHitDice); + this->tableWeapon = (gcnew ValidateXML::MonsterList::WeaponDataTable()); + __super::Tables->Add(this->tableWeapon); + System::Data::ForeignKeyConstraint^ fkc; + fkc = (gcnew System::Data::ForeignKeyConstraint(L"Monster_HitDice", gcnew cli::array< System::Data::DataColumn^ >(1) {this->tableMonster->Monster_IdColumn}, + gcnew cli::array< System::Data::DataColumn^ >(1) {this->tableHitDice->Monster_IdColumn})); + this->tableHitDice->Constraints->Add(fkc); + fkc->AcceptRejectRule = System::Data::AcceptRejectRule::None; + fkc->DeleteRule = System::Data::Rule::Cascade; + fkc->UpdateRule = System::Data::Rule::Cascade; + fkc = (gcnew System::Data::ForeignKeyConstraint(L"Monster_Weapon", gcnew cli::array< System::Data::DataColumn^ >(1) {this->tableMonster->Monster_IdColumn}, + gcnew cli::array< System::Data::DataColumn^ >(1) {this->tableWeapon->Monster_IdColumn})); + this->tableWeapon->Constraints->Add(fkc); + fkc->AcceptRejectRule = System::Data::AcceptRejectRule::None; + fkc->DeleteRule = System::Data::Rule::Cascade; + fkc->UpdateRule = System::Data::Rule::Cascade; + this->relationMonster_HitDice = (gcnew System::Data::DataRelation(L"Monster_HitDice", gcnew cli::array< System::Data::DataColumn^ >(1) {this->tableMonster->Monster_IdColumn}, + gcnew cli::array< System::Data::DataColumn^ >(1) {this->tableHitDice->Monster_IdColumn}, false)); + this->relationMonster_HitDice->Nested = true; + this->Relations->Add(this->relationMonster_HitDice); + this->relationMonster_Weapon = (gcnew System::Data::DataRelation(L"Monster_Weapon", gcnew cli::array< System::Data::DataColumn^ >(1) {this->tableMonster->Monster_IdColumn}, + gcnew cli::array< System::Data::DataColumn^ >(1) {this->tableWeapon->Monster_IdColumn}, false)); + this->relationMonster_Weapon->Nested = true; + this->Relations->Add(this->relationMonster_Weapon); + } + + inline System::Boolean MonsterList::ShouldSerializeMonster() { + return false; + } + + inline System::Boolean MonsterList::ShouldSerializeHitDice() { + return false; + } + + inline System::Boolean MonsterList::ShouldSerializeWeapon() { + return false; + } + + inline System::Void MonsterList::SchemaChanged(System::Object^ sender, System::ComponentModel::CollectionChangeEventArgs^ e) { + if (e->Action == System::ComponentModel::CollectionChangeAction::Remove) { + this->InitVars(); + } + } + + inline System::Xml::Schema::XmlSchemaComplexType^ MonsterList::GetTypedDataSetSchema(System::Xml::Schema::XmlSchemaSet^ xs) { + ValidateXML::MonsterList^ ds = (gcnew ValidateXML::MonsterList()); + System::Xml::Schema::XmlSchemaComplexType^ type = (gcnew System::Xml::Schema::XmlSchemaComplexType()); + System::Xml::Schema::XmlSchemaSequence^ sequence = (gcnew System::Xml::Schema::XmlSchemaSequence()); + xs->Add(ds->GetSchemaSerializable()); + System::Xml::Schema::XmlSchemaAny^ any = (gcnew System::Xml::Schema::XmlSchemaAny()); + any->Namespace = ds->Namespace; + sequence->Items->Add(any); + type->Particle = sequence; + return type; + } + + + inline MonsterList::MonsterDataTable::MonsterDataTable() { + this->TableName = L"Monster"; + this->BeginInit(); + this->InitClass(); + this->EndInit(); + } + + inline MonsterList::MonsterDataTable::MonsterDataTable(System::Data::DataTable^ table) { + this->TableName = table->TableName; + if (table->CaseSensitive != table->DataSet->CaseSensitive) { + this->CaseSensitive = table->CaseSensitive; + } + if (table->Locale->ToString() != table->DataSet->Locale->ToString()) { + this->Locale = table->Locale; + } + if (table->Namespace != table->DataSet->Namespace) { + this->Namespace = table->Namespace; + } + this->Prefix = table->Prefix; + this->MinimumCapacity = table->MinimumCapacity; + } + + inline MonsterList::MonsterDataTable::MonsterDataTable(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context) : + System::Data::DataTable(info, context) { + this->InitVars(); + } + + inline System::Data::DataColumn^ MonsterList::MonsterDataTable::NameColumn::get() { + return this->columnName; + } + + inline System::Data::DataColumn^ MonsterList::MonsterDataTable::Monster_IdColumn::get() { + return this->columnMonster_Id; + } + + inline System::Int32 MonsterList::MonsterDataTable::Count::get() { + return this->Rows->Count; + } + + inline ValidateXML::MonsterList::MonsterRow^ MonsterList::MonsterDataTable::default::get(System::Int32 index) { + return (cli::safe_cast(this->Rows[index])); + } + + inline System::Void MonsterList::MonsterDataTable::AddMonsterRow(ValidateXML::MonsterList::MonsterRow^ row) { + this->Rows->Add(row); + } + + inline ValidateXML::MonsterList::MonsterRow^ MonsterList::MonsterDataTable::AddMonsterRow(System::String^ Name) { + ValidateXML::MonsterList::MonsterRow^ rowMonsterRow = (cli::safe_cast(this->NewRow())); + rowMonsterRow->ItemArray = gcnew cli::array< System::Object^ >(2) {Name, nullptr}; + this->Rows->Add(rowMonsterRow); + return rowMonsterRow; + } + + inline System::Collections::IEnumerator^ MonsterList::MonsterDataTable::GetEnumerator() { + return this->Rows->GetEnumerator(); + } + + inline System::Data::DataTable^ MonsterList::MonsterDataTable::Clone() { + ValidateXML::MonsterList::MonsterDataTable^ cln = (cli::safe_cast(__super::Clone())); + cln->InitVars(); + return cln; + } + + inline System::Data::DataTable^ MonsterList::MonsterDataTable::CreateInstance() { + return (gcnew ValidateXML::MonsterList::MonsterDataTable()); + } + + inline System::Void MonsterList::MonsterDataTable::InitVars() { + this->columnName = __super::Columns[L"Name"]; + this->columnMonster_Id = __super::Columns[L"Monster_Id"]; + } + + inline System::Void MonsterList::MonsterDataTable::InitClass() { + this->columnName = (gcnew System::Data::DataColumn(L"Name", System::String::typeid, nullptr, System::Data::MappingType::Element)); + __super::Columns->Add(this->columnName); + this->columnMonster_Id = (gcnew System::Data::DataColumn(L"Monster_Id", System::Int32::typeid, nullptr, System::Data::MappingType::Hidden)); + __super::Columns->Add(this->columnMonster_Id); + this->Constraints->Add((gcnew System::Data::UniqueConstraint(L"Constraint1", gcnew cli::array< System::Data::DataColumn^ >(1) {this->columnMonster_Id}, + true))); + this->columnName->AllowDBNull = false; + this->columnMonster_Id->AutoIncrement = true; + this->columnMonster_Id->AllowDBNull = false; + this->columnMonster_Id->Unique = true; + } + + inline ValidateXML::MonsterList::MonsterRow^ MonsterList::MonsterDataTable::NewMonsterRow() { + return (cli::safe_cast(this->NewRow())); + } + + inline System::Data::DataRow^ MonsterList::MonsterDataTable::NewRowFromBuilder(System::Data::DataRowBuilder^ builder) { + return (gcnew ValidateXML::MonsterList::MonsterRow(builder)); + } + + inline System::Type^ MonsterList::MonsterDataTable::GetRowType() { + return ValidateXML::MonsterList::MonsterRow::typeid; + } + + inline System::Void MonsterList::MonsterDataTable::OnRowChanged(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowChanged(e); + { + this->MonsterRowChanged(this, (gcnew ValidateXML::MonsterList::MonsterRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::MonsterDataTable::OnRowChanging(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowChanging(e); + { + this->MonsterRowChanging(this, (gcnew ValidateXML::MonsterList::MonsterRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::MonsterDataTable::OnRowDeleted(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowDeleted(e); + { + this->MonsterRowDeleted(this, (gcnew ValidateXML::MonsterList::MonsterRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::MonsterDataTable::OnRowDeleting(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowDeleting(e); + { + this->MonsterRowDeleting(this, (gcnew ValidateXML::MonsterList::MonsterRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::MonsterDataTable::RemoveMonsterRow(ValidateXML::MonsterList::MonsterRow^ row) { + this->Rows->Remove(row); + } + + inline System::Xml::Schema::XmlSchemaComplexType^ MonsterList::MonsterDataTable::GetTypedTableSchema(System::Xml::Schema::XmlSchemaSet^ xs) { + System::Xml::Schema::XmlSchemaComplexType^ type = (gcnew System::Xml::Schema::XmlSchemaComplexType()); + System::Xml::Schema::XmlSchemaSequence^ sequence = (gcnew System::Xml::Schema::XmlSchemaSequence()); + ValidateXML::MonsterList^ ds = (gcnew ValidateXML::MonsterList()); + xs->Add(ds->GetSchemaSerializable()); + System::Xml::Schema::XmlSchemaAny^ any1 = (gcnew System::Xml::Schema::XmlSchemaAny()); + any1->Namespace = L"http://www.w3.org/2001/XMLSchema"; + any1->MinOccurs = System::Decimal(0); + any1->MaxOccurs = System::Decimal::MaxValue; + any1->ProcessContents = System::Xml::Schema::XmlSchemaContentProcessing::Lax; + sequence->Items->Add(any1); + System::Xml::Schema::XmlSchemaAny^ any2 = (gcnew System::Xml::Schema::XmlSchemaAny()); + any2->Namespace = L"urn:schemas-microsoft-com:xml-diffgram-v1"; + any2->MinOccurs = System::Decimal(1); + any2->ProcessContents = System::Xml::Schema::XmlSchemaContentProcessing::Lax; + sequence->Items->Add(any2); + System::Xml::Schema::XmlSchemaAttribute^ attribute1 = (gcnew System::Xml::Schema::XmlSchemaAttribute()); + attribute1->Name = L"namespace"; + attribute1->FixedValue = ds->Namespace; + type->Attributes->Add(attribute1); + System::Xml::Schema::XmlSchemaAttribute^ attribute2 = (gcnew System::Xml::Schema::XmlSchemaAttribute()); + attribute2->Name = L"tableTypeName"; + attribute2->FixedValue = L"MonsterDataTable"; + type->Attributes->Add(attribute2); + type->Particle = sequence; + return type; + } + + + inline MonsterList::HitDiceDataTable::HitDiceDataTable() { + this->TableName = L"HitDice"; + this->BeginInit(); + this->InitClass(); + this->EndInit(); + } + + inline MonsterList::HitDiceDataTable::HitDiceDataTable(System::Data::DataTable^ table) { + this->TableName = table->TableName; + if (table->CaseSensitive != table->DataSet->CaseSensitive) { + this->CaseSensitive = table->CaseSensitive; + } + if (table->Locale->ToString() != table->DataSet->Locale->ToString()) { + this->Locale = table->Locale; + } + if (table->Namespace != table->DataSet->Namespace) { + this->Namespace = table->Namespace; + } + this->Prefix = table->Prefix; + this->MinimumCapacity = table->MinimumCapacity; + } + + inline MonsterList::HitDiceDataTable::HitDiceDataTable(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context) : + System::Data::DataTable(info, context) { + this->InitVars(); + } + + inline System::Data::DataColumn^ MonsterList::HitDiceDataTable::DiceColumn::get() { + return this->columnDice; + } + + inline System::Data::DataColumn^ MonsterList::HitDiceDataTable::DefaultColumn::get() { + return this->columnDefault; + } + + inline System::Data::DataColumn^ MonsterList::HitDiceDataTable::Monster_IdColumn::get() { + return this->columnMonster_Id; + } + + inline System::Int32 MonsterList::HitDiceDataTable::Count::get() { + return this->Rows->Count; + } + + inline ValidateXML::MonsterList::HitDiceRow^ MonsterList::HitDiceDataTable::default::get(System::Int32 index) { + return (cli::safe_cast(this->Rows[index])); + } + + inline System::Void MonsterList::HitDiceDataTable::AddHitDiceRow(ValidateXML::MonsterList::HitDiceRow^ row) { + this->Rows->Add(row); + } + + inline ValidateXML::MonsterList::HitDiceRow^ MonsterList::HitDiceDataTable::AddHitDiceRow(System::String^ Dice, System::Byte Default, + ValidateXML::MonsterList::MonsterRow^ parentMonsterRowByMonster_HitDice) { + ValidateXML::MonsterList::HitDiceRow^ rowHitDiceRow = (cli::safe_cast(this->NewRow())); + rowHitDiceRow->ItemArray = gcnew cli::array< System::Object^ >(3) {Dice, Default, parentMonsterRowByMonster_HitDice[1]}; + this->Rows->Add(rowHitDiceRow); + return rowHitDiceRow; + } + + inline System::Collections::IEnumerator^ MonsterList::HitDiceDataTable::GetEnumerator() { + return this->Rows->GetEnumerator(); + } + + inline System::Data::DataTable^ MonsterList::HitDiceDataTable::Clone() { + ValidateXML::MonsterList::HitDiceDataTable^ cln = (cli::safe_cast(__super::Clone())); + cln->InitVars(); + return cln; + } + + inline System::Data::DataTable^ MonsterList::HitDiceDataTable::CreateInstance() { + return (gcnew ValidateXML::MonsterList::HitDiceDataTable()); + } + + inline System::Void MonsterList::HitDiceDataTable::InitVars() { + this->columnDice = __super::Columns[L"Dice"]; + this->columnDefault = __super::Columns[L"Default"]; + this->columnMonster_Id = __super::Columns[L"Monster_Id"]; + } + + inline System::Void MonsterList::HitDiceDataTable::InitClass() { + this->columnDice = (gcnew System::Data::DataColumn(L"Dice", System::String::typeid, nullptr, System::Data::MappingType::Attribute)); + __super::Columns->Add(this->columnDice); + this->columnDefault = (gcnew System::Data::DataColumn(L"Default", System::Byte::typeid, nullptr, System::Data::MappingType::Attribute)); + __super::Columns->Add(this->columnDefault); + this->columnMonster_Id = (gcnew System::Data::DataColumn(L"Monster_Id", System::Int32::typeid, nullptr, System::Data::MappingType::Hidden)); + __super::Columns->Add(this->columnMonster_Id); + this->columnDice->AllowDBNull = false; + this->columnDice->Namespace = L""; + this->columnDefault->AllowDBNull = false; + this->columnDefault->Namespace = L""; + } + + inline ValidateXML::MonsterList::HitDiceRow^ MonsterList::HitDiceDataTable::NewHitDiceRow() { + return (cli::safe_cast(this->NewRow())); + } + + inline System::Data::DataRow^ MonsterList::HitDiceDataTable::NewRowFromBuilder(System::Data::DataRowBuilder^ builder) { + return (gcnew ValidateXML::MonsterList::HitDiceRow(builder)); + } + + inline System::Type^ MonsterList::HitDiceDataTable::GetRowType() { + return ValidateXML::MonsterList::HitDiceRow::typeid; + } + + inline System::Void MonsterList::HitDiceDataTable::OnRowChanged(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowChanged(e); + { + this->HitDiceRowChanged(this, (gcnew ValidateXML::MonsterList::HitDiceRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::HitDiceDataTable::OnRowChanging(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowChanging(e); + { + this->HitDiceRowChanging(this, (gcnew ValidateXML::MonsterList::HitDiceRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::HitDiceDataTable::OnRowDeleted(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowDeleted(e); + { + this->HitDiceRowDeleted(this, (gcnew ValidateXML::MonsterList::HitDiceRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::HitDiceDataTable::OnRowDeleting(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowDeleting(e); + { + this->HitDiceRowDeleting(this, (gcnew ValidateXML::MonsterList::HitDiceRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::HitDiceDataTable::RemoveHitDiceRow(ValidateXML::MonsterList::HitDiceRow^ row) { + this->Rows->Remove(row); + } + + inline System::Xml::Schema::XmlSchemaComplexType^ MonsterList::HitDiceDataTable::GetTypedTableSchema(System::Xml::Schema::XmlSchemaSet^ xs) { + System::Xml::Schema::XmlSchemaComplexType^ type = (gcnew System::Xml::Schema::XmlSchemaComplexType()); + System::Xml::Schema::XmlSchemaSequence^ sequence = (gcnew System::Xml::Schema::XmlSchemaSequence()); + ValidateXML::MonsterList^ ds = (gcnew ValidateXML::MonsterList()); + xs->Add(ds->GetSchemaSerializable()); + System::Xml::Schema::XmlSchemaAny^ any1 = (gcnew System::Xml::Schema::XmlSchemaAny()); + any1->Namespace = L"http://www.w3.org/2001/XMLSchema"; + any1->MinOccurs = System::Decimal(0); + any1->MaxOccurs = System::Decimal::MaxValue; + any1->ProcessContents = System::Xml::Schema::XmlSchemaContentProcessing::Lax; + sequence->Items->Add(any1); + System::Xml::Schema::XmlSchemaAny^ any2 = (gcnew System::Xml::Schema::XmlSchemaAny()); + any2->Namespace = L"urn:schemas-microsoft-com:xml-diffgram-v1"; + any2->MinOccurs = System::Decimal(1); + any2->ProcessContents = System::Xml::Schema::XmlSchemaContentProcessing::Lax; + sequence->Items->Add(any2); + System::Xml::Schema::XmlSchemaAttribute^ attribute1 = (gcnew System::Xml::Schema::XmlSchemaAttribute()); + attribute1->Name = L"namespace"; + attribute1->FixedValue = ds->Namespace; + type->Attributes->Add(attribute1); + System::Xml::Schema::XmlSchemaAttribute^ attribute2 = (gcnew System::Xml::Schema::XmlSchemaAttribute()); + attribute2->Name = L"tableTypeName"; + attribute2->FixedValue = L"HitDiceDataTable"; + type->Attributes->Add(attribute2); + type->Particle = sequence; + return type; + } + + + inline MonsterList::WeaponDataTable::WeaponDataTable() { + this->TableName = L"Weapon"; + this->BeginInit(); + this->InitClass(); + this->EndInit(); + } + + inline MonsterList::WeaponDataTable::WeaponDataTable(System::Data::DataTable^ table) { + this->TableName = table->TableName; + if (table->CaseSensitive != table->DataSet->CaseSensitive) { + this->CaseSensitive = table->CaseSensitive; + } + if (table->Locale->ToString() != table->DataSet->Locale->ToString()) { + this->Locale = table->Locale; + } + if (table->Namespace != table->DataSet->Namespace) { + this->Namespace = table->Namespace; + } + this->Prefix = table->Prefix; + this->MinimumCapacity = table->MinimumCapacity; + } + + inline MonsterList::WeaponDataTable::WeaponDataTable(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context) : + System::Data::DataTable(info, context) { + this->InitVars(); + } + + inline System::Data::DataColumn^ MonsterList::WeaponDataTable::NumberColumn::get() { + return this->columnNumber; + } + + inline System::Data::DataColumn^ MonsterList::WeaponDataTable::DamageColumn::get() { + return this->columnDamage; + } + + inline System::Data::DataColumn^ MonsterList::WeaponDataTable::Weapon_textColumn::get() { + return this->columnWeapon_text; + } + + inline System::Data::DataColumn^ MonsterList::WeaponDataTable::Monster_IdColumn::get() { + return this->columnMonster_Id; + } + + inline System::Int32 MonsterList::WeaponDataTable::Count::get() { + return this->Rows->Count; + } + + inline ValidateXML::MonsterList::WeaponRow^ MonsterList::WeaponDataTable::default::get(System::Int32 index) { + return (cli::safe_cast(this->Rows[index])); + } + + inline System::Void MonsterList::WeaponDataTable::AddWeaponRow(ValidateXML::MonsterList::WeaponRow^ row) { + this->Rows->Add(row); + } + + inline ValidateXML::MonsterList::WeaponRow^ MonsterList::WeaponDataTable::AddWeaponRow(System::Byte Number, System::String^ Damage, + System::String^ Weapon_text, ValidateXML::MonsterList::MonsterRow^ parentMonsterRowByMonster_Weapon) { + ValidateXML::MonsterList::WeaponRow^ rowWeaponRow = (cli::safe_cast(this->NewRow())); + rowWeaponRow->ItemArray = gcnew cli::array< System::Object^ >(4) {Number, Damage, Weapon_text, parentMonsterRowByMonster_Weapon[1]}; + this->Rows->Add(rowWeaponRow); + return rowWeaponRow; + } + + inline System::Collections::IEnumerator^ MonsterList::WeaponDataTable::GetEnumerator() { + return this->Rows->GetEnumerator(); + } + + inline System::Data::DataTable^ MonsterList::WeaponDataTable::Clone() { + ValidateXML::MonsterList::WeaponDataTable^ cln = (cli::safe_cast(__super::Clone())); + cln->InitVars(); + return cln; + } + + inline System::Data::DataTable^ MonsterList::WeaponDataTable::CreateInstance() { + return (gcnew ValidateXML::MonsterList::WeaponDataTable()); + } + + inline System::Void MonsterList::WeaponDataTable::InitVars() { + this->columnNumber = __super::Columns[L"Number"]; + this->columnDamage = __super::Columns[L"Damage"]; + this->columnWeapon_text = __super::Columns[L"Weapon_text"]; + this->columnMonster_Id = __super::Columns[L"Monster_Id"]; + } + + inline System::Void MonsterList::WeaponDataTable::InitClass() { + this->columnNumber = (gcnew System::Data::DataColumn(L"Number", System::Byte::typeid, nullptr, System::Data::MappingType::Attribute)); + __super::Columns->Add(this->columnNumber); + this->columnDamage = (gcnew System::Data::DataColumn(L"Damage", System::String::typeid, nullptr, System::Data::MappingType::Attribute)); + __super::Columns->Add(this->columnDamage); + this->columnWeapon_text = (gcnew System::Data::DataColumn(L"Weapon_text", System::String::typeid, nullptr, System::Data::MappingType::SimpleContent)); + __super::Columns->Add(this->columnWeapon_text); + this->columnMonster_Id = (gcnew System::Data::DataColumn(L"Monster_Id", System::Int32::typeid, nullptr, System::Data::MappingType::Hidden)); + __super::Columns->Add(this->columnMonster_Id); + this->columnNumber->AllowDBNull = false; + this->columnNumber->Namespace = L""; + this->columnDamage->AllowDBNull = false; + this->columnDamage->Namespace = L""; + this->columnWeapon_text->AllowDBNull = false; + } + + inline ValidateXML::MonsterList::WeaponRow^ MonsterList::WeaponDataTable::NewWeaponRow() { + return (cli::safe_cast(this->NewRow())); + } + + inline System::Data::DataRow^ MonsterList::WeaponDataTable::NewRowFromBuilder(System::Data::DataRowBuilder^ builder) { + return (gcnew ValidateXML::MonsterList::WeaponRow(builder)); + } + + inline System::Type^ MonsterList::WeaponDataTable::GetRowType() { + return ValidateXML::MonsterList::WeaponRow::typeid; + } + + inline System::Void MonsterList::WeaponDataTable::OnRowChanged(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowChanged(e); + { + this->WeaponRowChanged(this, (gcnew ValidateXML::MonsterList::WeaponRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::WeaponDataTable::OnRowChanging(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowChanging(e); + { + this->WeaponRowChanging(this, (gcnew ValidateXML::MonsterList::WeaponRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::WeaponDataTable::OnRowDeleted(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowDeleted(e); + { + this->WeaponRowDeleted(this, (gcnew ValidateXML::MonsterList::WeaponRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::WeaponDataTable::OnRowDeleting(System::Data::DataRowChangeEventArgs^ e) { + __super::OnRowDeleting(e); + { + this->WeaponRowDeleting(this, (gcnew ValidateXML::MonsterList::WeaponRowChangeEvent((cli::safe_cast(e->Row)), + e->Action))); + } + } + + inline System::Void MonsterList::WeaponDataTable::RemoveWeaponRow(ValidateXML::MonsterList::WeaponRow^ row) { + this->Rows->Remove(row); + } + + inline System::Xml::Schema::XmlSchemaComplexType^ MonsterList::WeaponDataTable::GetTypedTableSchema(System::Xml::Schema::XmlSchemaSet^ xs) { + System::Xml::Schema::XmlSchemaComplexType^ type = (gcnew System::Xml::Schema::XmlSchemaComplexType()); + System::Xml::Schema::XmlSchemaSequence^ sequence = (gcnew System::Xml::Schema::XmlSchemaSequence()); + ValidateXML::MonsterList^ ds = (gcnew ValidateXML::MonsterList()); + xs->Add(ds->GetSchemaSerializable()); + System::Xml::Schema::XmlSchemaAny^ any1 = (gcnew System::Xml::Schema::XmlSchemaAny()); + any1->Namespace = L"http://www.w3.org/2001/XMLSchema"; + any1->MinOccurs = System::Decimal(0); + any1->MaxOccurs = System::Decimal::MaxValue; + any1->ProcessContents = System::Xml::Schema::XmlSchemaContentProcessing::Lax; + sequence->Items->Add(any1); + System::Xml::Schema::XmlSchemaAny^ any2 = (gcnew System::Xml::Schema::XmlSchemaAny()); + any2->Namespace = L"urn:schemas-microsoft-com:xml-diffgram-v1"; + any2->MinOccurs = System::Decimal(1); + any2->ProcessContents = System::Xml::Schema::XmlSchemaContentProcessing::Lax; + sequence->Items->Add(any2); + System::Xml::Schema::XmlSchemaAttribute^ attribute1 = (gcnew System::Xml::Schema::XmlSchemaAttribute()); + attribute1->Name = L"namespace"; + attribute1->FixedValue = ds->Namespace; + type->Attributes->Add(attribute1); + System::Xml::Schema::XmlSchemaAttribute^ attribute2 = (gcnew System::Xml::Schema::XmlSchemaAttribute()); + attribute2->Name = L"tableTypeName"; + attribute2->FixedValue = L"WeaponDataTable"; + type->Attributes->Add(attribute2); + type->Particle = sequence; + return type; + } + + + inline MonsterList::MonsterRow::MonsterRow(System::Data::DataRowBuilder^ rb) : + System::Data::DataRow(rb) { + this->tableMonster = (cli::safe_cast(this->Table)); + } + + inline System::String^ MonsterList::MonsterRow::Name::get() { + return (cli::safe_cast(this[this->tableMonster->NameColumn])); + } + inline System::Void MonsterList::MonsterRow::Name::set(System::String^ value) { + this[this->tableMonster->NameColumn] = value; + } + + inline System::Int32 MonsterList::MonsterRow::Monster_Id::get() { + return (*cli::safe_cast(this[this->tableMonster->Monster_IdColumn])); + } + inline System::Void MonsterList::MonsterRow::Monster_Id::set(System::Int32 value) { + this[this->tableMonster->Monster_IdColumn] = value; + } + + inline cli::array< ValidateXML::MonsterList::HitDiceRow^ >^ MonsterList::MonsterRow::GetHitDiceRows() { + return (cli::safe_cast^ >(__super::GetChildRows(this->Table->ChildRelations[L"Monster_HitDice"]))); + } + + inline cli::array< ValidateXML::MonsterList::WeaponRow^ >^ MonsterList::MonsterRow::GetWeaponRows() { + return (cli::safe_cast^ >(__super::GetChildRows(this->Table->ChildRelations[L"Monster_Weapon"]))); + } + + + inline MonsterList::HitDiceRow::HitDiceRow(System::Data::DataRowBuilder^ rb) : + System::Data::DataRow(rb) { + this->tableHitDice = (cli::safe_cast(this->Table)); + } + + inline System::String^ MonsterList::HitDiceRow::Dice::get() { + return (cli::safe_cast(this[this->tableHitDice->DiceColumn])); + } + inline System::Void MonsterList::HitDiceRow::Dice::set(System::String^ value) { + this[this->tableHitDice->DiceColumn] = value; + } + + inline System::Byte MonsterList::HitDiceRow::Default::get() { + return (*cli::safe_cast(this[this->tableHitDice->DefaultColumn])); + } + inline System::Void MonsterList::HitDiceRow::Default::set(System::Byte value) { + this[this->tableHitDice->DefaultColumn] = value; + } + + inline System::Int32 MonsterList::HitDiceRow::Monster_Id::get() { + try { + return (*cli::safe_cast(this[this->tableHitDice->Monster_IdColumn])); + } + catch (System::InvalidCastException^ e) { + throw (gcnew System::Data::StrongTypingException(L"The value for column \'Monster_Id\' in table \'HitDice\' is DBNull.", + e)); + } + } + inline System::Void MonsterList::HitDiceRow::Monster_Id::set(System::Int32 value) { + this[this->tableHitDice->Monster_IdColumn] = value; + } + + inline ValidateXML::MonsterList::MonsterRow^ MonsterList::HitDiceRow::MonsterRow::get() { + return (cli::safe_cast(this->GetParentRow(this->Table->ParentRelations[L"Monster_HitDice"]))); + } + inline System::Void MonsterList::HitDiceRow::MonsterRow::set(ValidateXML::MonsterList::MonsterRow^ value) { + this->SetParentRow(value, this->Table->ParentRelations[L"Monster_HitDice"]); + } + + inline System::Boolean MonsterList::HitDiceRow::IsMonster_IdNull() { + return this->IsNull(this->tableHitDice->Monster_IdColumn); + } + + inline System::Void MonsterList::HitDiceRow::SetMonster_IdNull() { + this[this->tableHitDice->Monster_IdColumn] = System::Convert::DBNull; + } + + + inline MonsterList::WeaponRow::WeaponRow(System::Data::DataRowBuilder^ rb) : + System::Data::DataRow(rb) { + this->tableWeapon = (cli::safe_cast(this->Table)); + } + + inline System::Byte MonsterList::WeaponRow::Number::get() { + return (*cli::safe_cast(this[this->tableWeapon->NumberColumn])); + } + inline System::Void MonsterList::WeaponRow::Number::set(System::Byte value) { + this[this->tableWeapon->NumberColumn] = value; + } + + inline System::String^ MonsterList::WeaponRow::Damage::get() { + return (cli::safe_cast(this[this->tableWeapon->DamageColumn])); + } + inline System::Void MonsterList::WeaponRow::Damage::set(System::String^ value) { + this[this->tableWeapon->DamageColumn] = value; + } + + inline System::String^ MonsterList::WeaponRow::Weapon_text::get() { + return (cli::safe_cast(this[this->tableWeapon->Weapon_textColumn])); + } + inline System::Void MonsterList::WeaponRow::Weapon_text::set(System::String^ value) { + this[this->tableWeapon->Weapon_textColumn] = value; + } + + inline System::Int32 MonsterList::WeaponRow::Monster_Id::get() { + try { + return (*cli::safe_cast(this[this->tableWeapon->Monster_IdColumn])); + } + catch (System::InvalidCastException^ e) { + throw (gcnew System::Data::StrongTypingException(L"The value for column \'Monster_Id\' in table \'Weapon\' is DBNull.", + e)); + } + } + inline System::Void MonsterList::WeaponRow::Monster_Id::set(System::Int32 value) { + this[this->tableWeapon->Monster_IdColumn] = value; + } + + inline ValidateXML::MonsterList::MonsterRow^ MonsterList::WeaponRow::MonsterRow::get() { + return (cli::safe_cast(this->GetParentRow(this->Table->ParentRelations[L"Monster_Weapon"]))); + } + inline System::Void MonsterList::WeaponRow::MonsterRow::set(ValidateXML::MonsterList::MonsterRow^ value) { + this->SetParentRow(value, this->Table->ParentRelations[L"Monster_Weapon"]); + } + + inline System::Boolean MonsterList::WeaponRow::IsMonster_IdNull() { + return this->IsNull(this->tableWeapon->Monster_IdColumn); + } + + inline System::Void MonsterList::WeaponRow::SetMonster_IdNull() { + this[this->tableWeapon->Monster_IdColumn] = System::Convert::DBNull; + } + + + inline MonsterList::MonsterRowChangeEvent::MonsterRowChangeEvent(ValidateXML::MonsterList::MonsterRow^ row, System::Data::DataRowAction action) { + this->eventRow = row; + this->eventAction = action; + } + + inline ValidateXML::MonsterList::MonsterRow^ MonsterList::MonsterRowChangeEvent::Row::get() { + return this->eventRow; + } + + inline System::Data::DataRowAction MonsterList::MonsterRowChangeEvent::Action::get() { + return this->eventAction; + } + + + inline MonsterList::HitDiceRowChangeEvent::HitDiceRowChangeEvent(ValidateXML::MonsterList::HitDiceRow^ row, System::Data::DataRowAction action) { + this->eventRow = row; + this->eventAction = action; + } + + inline ValidateXML::MonsterList::HitDiceRow^ MonsterList::HitDiceRowChangeEvent::Row::get() { + return this->eventRow; + } + + inline System::Data::DataRowAction MonsterList::HitDiceRowChangeEvent::Action::get() { + return this->eventAction; + } + + + inline MonsterList::WeaponRowChangeEvent::WeaponRowChangeEvent(ValidateXML::MonsterList::WeaponRow^ row, System::Data::DataRowAction action) { + this->eventRow = row; + this->eventAction = action; + } + + inline ValidateXML::MonsterList::WeaponRow^ MonsterList::WeaponRowChangeEvent::Row::get() { + return this->eventRow; + } + + inline System::Data::DataRowAction MonsterList::WeaponRowChangeEvent::Action::get() { + return this->eventAction; + } +} diff --git a/Chapter13/ValidateXML/Monsters.xml b/Chapter13/ValidateXML/Monsters.xml new file mode 100644 index 0000000..f9b8a2b --- /dev/null +++ b/Chapter13/ValidateXML/Monsters.xml @@ -0,0 +1,12 @@ + + + + + + + Goblin + Dagger + + + + \ No newline at end of file diff --git a/Chapter13/ValidateXML/Monsters.xsd b/Chapter13/ValidateXML/Monsters.xsd new file mode 100644 index 0000000..402b88e --- /dev/null +++ b/Chapter13/ValidateXML/Monsters.xsd @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter13/ValidateXML/Monsters.xsx b/Chapter13/ValidateXML/Monsters.xsx new file mode 100644 index 0000000..b3fd871 --- /dev/null +++ b/Chapter13/ValidateXML/Monsters.xsx @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Chapter13/ValidateXML/ValidateXML.cpp b/Chapter13/ValidateXML/ValidateXML.cpp new file mode 100644 index 0000000..7d59463 --- /dev/null +++ b/Chapter13/ValidateXML/ValidateXML.cpp @@ -0,0 +1,50 @@ +using namespace System; +using namespace System::Xml; +using namespace System::Xml::Schema; + +ref class ValidateXML +{ +public: + ValidateXML(String ^filename) + { + XmlReader ^vreader; + try + { + XmlReaderSettings ^settings = gcnew XmlReaderSettings(); + settings->ProhibitDtd = false; + settings->ValidationType = ValidationType::DTD; + settings->ValidationEventHandler += + gcnew ValidationEventHandler(this, + &ValidateXML::ValidationHandler); + + vreader = XmlReader::Create("Monsters.xml", settings); + + while(vreader->Read()) + { + // ... Process nodes just like XmlTextReader() + } + Console::WriteLine("Finished Processing"); + } + catch (Exception ^e) + { + Console::WriteLine(e->Message); + } + finally + { + if (vreader->ReadState != ReadState::Closed) + { + vreader->Close(); + } + } + } + + void ValidationHandler(Object ^sender, ValidationEventArgs ^e) + { + Console::WriteLine(e->Message); + } +}; + +void main() +{ + gcnew ValidateXML("Monsters.xml"); +} \ No newline at end of file diff --git a/Chapter13/ValidateXML/ValidateXML.vcproj b/Chapter13/ValidateXML/ValidateXML.vcproj new file mode 100644 index 0000000..e9a8823 --- /dev/null +++ b/Chapter13/ValidateXML/ValidateXML.vcproj @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/WriteXML/Goblin.xml b/Chapter13/WriteXML/Goblin.xml new file mode 100644 index 0000000..07c80ed --- /dev/null +++ b/Chapter13/WriteXML/Goblin.xml @@ -0,0 +1,13 @@ + + + + + Goblin + + Dagger + + \ No newline at end of file diff --git a/Chapter13/WriteXML/WriteXML.cpp b/Chapter13/WriteXML/WriteXML.cpp new file mode 100644 index 0000000..2a6af70 --- /dev/null +++ b/Chapter13/WriteXML/WriteXML.cpp @@ -0,0 +1,57 @@ +using namespace System; +using namespace System::Xml; + +void main() +{ + XmlWriter ^writer; + try + { + XmlWriterSettings ^settings = gcnew XmlWriterSettings(); + settings->Indent = true; + settings->IndentChars = (" "); + settings->NewLineOnAttributes = true; + + writer = XmlWriter::Create("Goblin.xml", settings); + + writer->WriteStartDocument(); + + writer->WriteStartElement("MonsterList"); + + writer->WriteComment("Program Generated Easy Monster"); + writer->WriteStartElement("Monster"); + + writer->WriteStartElement("Name"); + writer->WriteString("Goblin"); + writer->WriteEndElement(); + + writer->WriteStartElement("HitDice"); + writer->WriteAttributeString("Dice", "1d8"); + writer->WriteAttributeString("Default", "4"); + writer->WriteEndElement(); + + writer->WriteStartElement("Weapon"); + writer->WriteAttributeString("Number", "1"); + writer->WriteAttributeString("Damage", "1d4"); + writer->WriteString("Dagger"); + writer->WriteEndElement(); + + // The folling not needed with WriteEndDocument + // writer->WriteEndElement(); + // writer->WriteEndElement(); + + writer->WriteEndDocument(); + + writer->Flush(); + } + catch (Exception ^e) + { + Console::WriteLine("XML Writer Aborted -- {0}", e->Message); + } + finally + { + if (writer->WriteState != WriteState::Closed) + { + writer->Close(); + } + } +} \ No newline at end of file diff --git a/Chapter13/WriteXML/WriteXML.vcproj b/Chapter13/WriteXML/WriteXML.vcproj new file mode 100644 index 0000000..feb82c2 --- /dev/null +++ b/Chapter13/WriteXML/WriteXML.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/WriteXMLDOM/Monsters.xml b/Chapter13/WriteXMLDOM/Monsters.xml new file mode 100644 index 0000000..6cfe12e --- /dev/null +++ b/Chapter13/WriteXMLDOM/Monsters.xml @@ -0,0 +1,25 @@ + + + + + + Goblin + + Dagger + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/WriteXMLDOM/New_Monsters.xml b/Chapter13/WriteXMLDOM/New_Monsters.xml new file mode 100644 index 0000000..ca990fe --- /dev/null +++ b/Chapter13/WriteXMLDOM/New_Monsters.xml @@ -0,0 +1,30 @@ + + + + + + Goblin + + Dagger + + + Skeleton + + Claw + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/WriteXMLDOM/WriteXMLDOM.cpp b/Chapter13/WriteXMLDOM/WriteXMLDOM.cpp new file mode 100644 index 0000000..d26bcce --- /dev/null +++ b/Chapter13/WriteXMLDOM/WriteXMLDOM.cpp @@ -0,0 +1,58 @@ +using namespace System; +using namespace System::Xml; + +XmlElement ^CreateMonster(XmlDocument ^doc) +{ + XmlElement ^skeleton = doc->CreateElement("Monster"); + + // Skeleton + XmlElement ^name = doc->CreateElement("Name"); + name->AppendChild(doc->CreateTextNode("Skeleton")); + skeleton->AppendChild(name); + + // + XmlElement ^hitdice = doc->CreateElement("HitDice"); + XmlAttribute ^att = doc->CreateAttribute("Dice"); + att->Value = "1/2 d12"; + hitdice->Attributes->Append(att); + att = doc->CreateAttribute("Default"); + att->Value = "3"; + hitdice->Attributes->Append(att); + skeleton->AppendChild(hitdice); + + // Claw + XmlElement ^weapon = doc->CreateElement("Weapon"); + att = doc->CreateAttribute("Number"); + att->Value = "2"; + weapon->Attributes->Append(att); + att = doc->CreateAttribute("Damage"); + att->Value = "1d3-1"; + weapon->Attributes->Append(att); + weapon->AppendChild(doc->CreateTextNode("Claw")); + skeleton->AppendChild(weapon); + + return skeleton; +} + +void main() +{ + XmlDocument ^doc = gcnew XmlDocument(); + + try + { + doc->Load("Monsters.xml"); + XmlNode ^root = doc->DocumentElement; + + // Skip comment and goblin + XmlNode ^child = root->FirstChild->NextSibling; + + // Insert new monster + root->InsertAfter(CreateMonster(doc), child); + + doc->Save("New_Monsters.xml"); + } + catch (Exception ^e) + { + Console::WriteLine("Error Occurred: {0}", e->Message ); + } +} diff --git a/Chapter13/WriteXMLDOM/WriteXMLDOM.vcproj b/Chapter13/WriteXMLDOM/WriteXMLDOM.vcproj new file mode 100644 index 0000000..205e687 --- /dev/null +++ b/Chapter13/WriteXMLDOM/WriteXMLDOM.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter13/XPathEx/Monsters.xml b/Chapter13/XPathEx/Monsters.xml new file mode 100644 index 0000000..f7568a5 --- /dev/null +++ b/Chapter13/XPathEx/Monsters.xml @@ -0,0 +1,25 @@ + + + + + + Goblin + + Dagger + + + + Succubus + + Claw + Dagger + + + + Red Dragon + + Bite + Claw + Wing + + \ No newline at end of file diff --git a/Chapter13/XPathEx/XPathEx.cpp b/Chapter13/XPathEx/XPathEx.cpp new file mode 100644 index 0000000..85422de --- /dev/null +++ b/Chapter13/XPathEx/XPathEx.cpp @@ -0,0 +1,93 @@ +using namespace System; +using namespace System::Xml; +using namespace System::Xml::XPath; +using namespace System::Collections; + +void GetMonsters(XPathNavigator ^nav) +{ + XPathNodeIterator ^list = + nav->Select("/MonsterList/Monster/Name"); + + Console::WriteLine("Monsters\n--------"); + while (list->MoveNext()) + { + XPathNavigator ^n = list->Current; + Console::WriteLine(n->Value); + } + +// The required code to do the same as above if no +// XPathNavigator concatenation occurred. +/* + list = nav->Select("/MonsterList/Monster/Name"); + + Console::WriteLine("Monsters\n--------"); + while (list->MoveNext()) + { + XPathNavigator ^n = list->Current; + n->MoveToFirstChild(); + Console::WriteLine(n->Value); + } +*/ +} + +void GetDragonsWeapons(XmlNode ^node) +{ + XmlNodeList ^list = + node->SelectNodes("//Monster[Name='Red Dragon']/Weapon"); + + Console::WriteLine("\nDragon's Weapons\n----------------"); + + IEnumerator ^en = list->GetEnumerator(); + while (en->MoveNext()) + { + XmlNode ^n = (XmlNode^)en->Current; + Console::WriteLine(n->FirstChild->Value); + } +} + +void GetGoblinSuccubusHitDice(XPathNavigator ^nav) +{ + XPathNodeIterator ^list = + nav->Select("//Monster[Name='Goblin' or Name='Succubus']/HitDice/@Dice"); + + Console::WriteLine("\nGoblin & Succubus HD\n--------------------"); + while (list->MoveNext()) + { + XPathNavigator ^n = list->Current; + Console::WriteLine(n->Value); + } +} + +void GetSingleAttackWeapons(XPathNavigator ^nav) +{ + XPathNodeIterator ^list = + nav->Select("//Weapon[@Number <= 1]"); + + Console::WriteLine("\nSingle Attack Weapons\n---------------------"); + while (list->MoveNext()) + { + XPathNavigator ^n = list->Current; + Console::WriteLine(n->Value); + } +} + +void main() +{ + XmlDocument ^doc = gcnew XmlDocument(); + + try + { + doc->Load("Monsters.xml"); + XPathNavigator ^nav = doc->CreateNavigator(); + nav->MoveToRoot(); + + GetMonsters(nav); + GetDragonsWeapons(doc->DocumentElement); + GetGoblinSuccubusHitDice(nav); + GetSingleAttackWeapons(nav); + } + catch (Exception ^e) + { + Console::WriteLine("Error Occurred: {0}", e->Message ); + } +} \ No newline at end of file diff --git a/Chapter13/XPathEx/XPathEx.vcproj b/Chapter13/XPathEx/XPathEx.vcproj new file mode 100644 index 0000000..3da5fca --- /dev/null +++ b/Chapter13/XPathEx/XPathEx.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter14/Chapter14.sln b/Chapter14/Chapter14.sln new file mode 100644 index 0000000..f9f264e --- /dev/null +++ b/Chapter14/Chapter14.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Simple", "Simple\Simple.vcproj", "{1DEB33AB-BB5B-4A30-8EAA-4B960DAA3465}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimpleCtrl", "SimpleCtrl\SimpleCtrl.vcproj", "{A386B412-F376-41A3-AF34-0FBB3982C188}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1DEB33AB-BB5B-4A30-8EAA-4B960DAA3465}.Debug|Win32.ActiveCfg = Debug|Win32 + {1DEB33AB-BB5B-4A30-8EAA-4B960DAA3465}.Debug|Win32.Build.0 = Debug|Win32 + {1DEB33AB-BB5B-4A30-8EAA-4B960DAA3465}.Release|Win32.ActiveCfg = Release|Win32 + {1DEB33AB-BB5B-4A30-8EAA-4B960DAA3465}.Release|Win32.Build.0 = Release|Win32 + {A386B412-F376-41A3-AF34-0FBB3982C188}.Debug|Win32.ActiveCfg = Debug|Win32 + {A386B412-F376-41A3-AF34-0FBB3982C188}.Debug|Win32.Build.0 = Debug|Win32 + {A386B412-F376-41A3-AF34-0FBB3982C188}.Release|Win32.ActiveCfg = Release|Win32 + {A386B412-F376-41A3-AF34-0FBB3982C188}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter14/Chapter14.suo b/Chapter14/Chapter14.suo new file mode 100644 index 0000000000000000000000000000000000000000..869662618046c6ab12ff64a26858bcec051e7e75 GIT binary patch literal 13824 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 Ng7t#=xb^ET_dmDY!esye literal 0 HcmV?d00001 diff --git a/Chapter14/Simple/AssemblyInfo.cpp b/Chapter14/Simple/AssemblyInfo.cpp new file mode 100644 index 0000000..c1849bf --- /dev/null +++ b/Chapter14/Simple/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("Simple")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("Simple")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter14/Simple/ProjectInstaller.cpp b/Chapter14/Simple/ProjectInstaller.cpp new file mode 100644 index 0000000..b1d5754 --- /dev/null +++ b/Chapter14/Simple/ProjectInstaller.cpp @@ -0,0 +1,2 @@ +#include "StdAfx.h" +#include "ProjectInstaller.h" diff --git a/Chapter14/Simple/ProjectInstaller.h b/Chapter14/Simple/ProjectInstaller.h new file mode 100644 index 0000000..0177941 --- /dev/null +++ b/Chapter14/Simple/ProjectInstaller.h @@ -0,0 +1,70 @@ +#pragma once + +using namespace System; +using namespace System::ComponentModel; +using namespace System::Collections; +using namespace System::Configuration::Install; + + +namespace Simple +{ + [RunInstaller(true)] + public ref class ProjectInstaller : public System::Configuration::Install::Installer + { + public: + ProjectInstaller(void) + { + InitializeComponent(); + } + + protected: + ~ProjectInstaller() + { + if (components) + { + delete components; + } + } + private: + System::ServiceProcess::ServiceProcessInstaller^ serviceProcessInstaller1; + System::ServiceProcess::ServiceInstaller^ serviceInstaller1; + System::Diagnostics::EventLogInstaller^ eventLogInstaller1; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->serviceProcessInstaller1 = (gcnew System::ServiceProcess::ServiceProcessInstaller()); + this->serviceInstaller1 = (gcnew System::ServiceProcess::ServiceInstaller()); + this->eventLogInstaller1 = (gcnew System::Diagnostics::EventLogInstaller()); + // + // serviceProcessInstaller1 + // + this->serviceProcessInstaller1->Account = System::ServiceProcess::ServiceAccount::LocalSystem; + this->serviceProcessInstaller1->Password = nullptr; + this->serviceProcessInstaller1->Username = nullptr; + // + // serviceInstaller1 + // + this->serviceInstaller1->ServiceName = L"SimpleWinService"; + // + // eventLogInstaller1 + // + this->eventLogInstaller1->CategoryCount = 0; + this->eventLogInstaller1->CategoryResourceFile = nullptr; + this->eventLogInstaller1->Log = L"Application"; + this->eventLogInstaller1->MessageResourceFile = nullptr; + this->eventLogInstaller1->ParameterResourceFile = nullptr; + this->eventLogInstaller1->Source = L"SimpleWinService"; + // + // ProjectInstaller + // + this->Installers->AddRange(gcnew cli::array< System::Configuration::Install::Installer^ >(3) {this->serviceProcessInstaller1, + this->serviceInstaller1, this->eventLogInstaller1}); + + } +#pragma endregion + }; +} diff --git a/Chapter14/Simple/ProjectInstaller.resx b/Chapter14/Simple/ProjectInstaller.resx new file mode 100644 index 0000000..40f2a64 --- /dev/null +++ b/Chapter14/Simple/ProjectInstaller.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 54 + + + 187, 17 + + + 187, 54 + + + False + + \ No newline at end of file diff --git a/Chapter14/Simple/Simple.vcproj b/Chapter14/Simple/Simple.vcproj new file mode 100644 index 0000000..79acb78 --- /dev/null +++ b/Chapter14/Simple/Simple.vcproj @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter14/Simple/SimpleWinService.cpp b/Chapter14/Simple/SimpleWinService.cpp new file mode 100644 index 0000000..48c1d18 --- /dev/null +++ b/Chapter14/Simple/SimpleWinService.cpp @@ -0,0 +1,78 @@ +// Simple.cpp : main Windows Service project file. + +#include "stdafx.h" +//#include +#include "SimpleWinService.h" + +using namespace Simple; +using namespace System::Collections; +using namespace System::ServiceProcess; +//using namespace System::Text; +//using namespace System::Security::Policy; +//using namespace System::Reflection; + +void main() +{ +#ifndef COMMANDLINE_DEBUG + + array^ ServicesToRun; + + // More than one user Service may run within the same process. To add + // another service to this process, change the following line to + // create a second service object. For example, + // + // ServicesToRun = gcnew array + // { + // gcnew Service1(), + // gcnew Service2() + // }; + // + ServicesToRun = gcnew array { gcnew SimpleWinService() }; + ServiceBase::Run(ServicesToRun); + +#else + + SimpleWinService ^svc = gcnew SimpleWinService(); + svc->OnStart(nullptr); + Console::WriteLine("Any key stop stop"); + Console::ReadLine(); + svc->OnStop(); + +#endif +} + + +//To install/uninstall the service, type: "Simple.exe -Install [-u]" +//int _tmain(int argc, _TCHAR* argv[]) +//{ +// if (argc >= 2) +// { +// if (argv[1][0] == _T('/')) +// { +// argv[1][0] = _T('-'); +// } +// +// if (_tcsicmp(argv[1], _T("-Install")) == 0) +// { +// array^ myargs = System::Environment::GetCommandLineArgs(); +// array^ args = gcnew array(myargs->Length - 1); +// +// // Set args[0] with the full path to the assembly, +// Assembly^ assem = Assembly::GetExecutingAssembly(); +// args[0] = assem->Location; +// +// Array::Copy(myargs, 2, args, 1, args->Length - 1); +// AppDomain^ dom = AppDomain::CreateDomain(L"execDom"); +// Type^ type = System::Object::typeid; +// String^ path = type->Assembly->Location; +// StringBuilder^ sb = gcnew StringBuilder(path->Substring(0, path->LastIndexOf(L"\\"))); +// sb->Append(L"\\InstallUtil.exe"); +// Evidence^ evidence = gcnew Evidence(); +// dom->ExecuteAssembly(sb->ToString(), evidence, args); +// } +// } +// else +// { +// ServiceBase::Run(gcnew SimpleWinService()); +// } +//} diff --git a/Chapter14/Simple/SimpleWinService.h b/Chapter14/Simple/SimpleWinService.h new file mode 100644 index 0000000..1d5501a --- /dev/null +++ b/Chapter14/Simple/SimpleWinService.h @@ -0,0 +1,117 @@ +#pragma once + +using namespace System; +using namespace System::Collections; +using namespace System::ServiceProcess; +using namespace System::ComponentModel; + + +namespace Simple +{ + public ref class SimpleWinService : public System::ServiceProcess::ServiceBase + { + private: + double interval; + + public: + SimpleWinService() + { + InitializeComponent(); + interval = 15000; // 15 seconds - default + } + protected: + ~SimpleWinService() + { + if (components) + { + delete components; + } + } + +#ifdef COMMANDLINE_DEBUG + public: +#endif + virtual void OnStart(array^ args) override + { + eventLog1->WriteEntry("SimpleWinService Started"); + + if (args == nullptr || args->Length == 0) + eventLog1->WriteEntry("Empty args"); + else + { + for each (String ^s in args) + { + eventLog1->WriteEntry(s); + } + } + + this->timer = gcnew System::Timers::Timer(interval); + this->timer->Elapsed += + gcnew System::Timers::ElapsedEventHandler(this, + &SimpleWinService::timer_Tick); + this->timer->Start(); + } + + virtual void OnStop() override + { + this->timer->Stop(); + eventLog1->WriteEntry("SimpleWinService Stopped"); + } + + virtual void OnPause() override + { + this->timer->Stop(); + eventLog1->WriteEntry("SimpleWinService Paused"); + } + + virtual void OnContinue() override + { + eventLog1->WriteEntry("SimpleWinService Continued"); + this->timer->Start(); + } + + virtual void OnCustomCommand(int cmd) override + { + if (cmd == 150) + this->timer->Interval = 15000; + else + this->timer->Interval = 20000; + } + + private: + System::Diagnostics::EventLog^ eventLog1; + System::Timers::Timer^ timer; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->eventLog1 = (gcnew System::Diagnostics::EventLog()); + (cli::safe_cast(this->eventLog1))->BeginInit(); + // + // eventLog1 + // + this->eventLog1->Log = L"Application"; + this->eventLog1->Source = L"SimpleWinService"; + // + // SimpleWinService + // + this->CanPauseAndContinue = true; + this->ServiceName = L"SimpleWinService"; + (cli::safe_cast(this->eventLog1))->EndInit(); + } + +#pragma endregion + + private: + void timer_Tick(System::Object^ sender, + System::Timers::ElapsedEventArgs^ e) + { + this->timer->Stop(); + eventLog1->WriteEntry("SimpleWinService Elapsed Event Occurred"); + this->timer->Start(); + } + }; +} diff --git a/Chapter14/Simple/SimpleWinService.resx b/Chapter14/Simple/SimpleWinService.resx new file mode 100644 index 0000000..10aaa1b --- /dev/null +++ b/Chapter14/Simple/SimpleWinService.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + False + + \ No newline at end of file diff --git a/Chapter14/Simple/stdafx.cpp b/Chapter14/Simple/stdafx.cpp new file mode 100644 index 0000000..9e5e4c6 --- /dev/null +++ b/Chapter14/Simple/stdafx.cpp @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// Simple.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" \ No newline at end of file diff --git a/Chapter14/Simple/stdafx.h b/Chapter14/Simple/stdafx.h new file mode 100644 index 0000000..47964b1 --- /dev/null +++ b/Chapter14/Simple/stdafx.h @@ -0,0 +1,7 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here + diff --git a/Chapter14/SimpleCtrl/AssemblyInfo.cpp b/Chapter14/SimpleCtrl/AssemblyInfo.cpp new file mode 100644 index 0000000..91887b2 --- /dev/null +++ b/Chapter14/SimpleCtrl/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SimpleCtrl")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SimpleCtrl")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter14/SimpleCtrl/Form1.h b/Chapter14/SimpleCtrl/Form1.h new file mode 100644 index 0000000..810d386 --- /dev/null +++ b/Chapter14/SimpleCtrl/Form1.h @@ -0,0 +1,170 @@ +#pragma once + + +namespace SimpleCtrl +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + using namespace System::ServiceProcess; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::ServiceProcess::ServiceController^ serviceController1; + System::Windows::Forms::Button^ bnIntv20; + System::Windows::Forms::Button^ bnIntv15; + System::Windows::Forms::Button^ bnStop; + System::Windows::Forms::Button^ bnStart; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->serviceController1 = (gcnew System::ServiceProcess::ServiceController()); + this->bnIntv20 = (gcnew System::Windows::Forms::Button()); + this->bnIntv15 = (gcnew System::Windows::Forms::Button()); + this->bnStop = (gcnew System::Windows::Forms::Button()); + this->bnStart = (gcnew System::Windows::Forms::Button()); + this->SuspendLayout(); + // + // serviceController1 + // + this->serviceController1->MachineName = L"amidala"; + this->serviceController1->ServiceName = L"SimpleWinService"; + // + // bnIntv20 + // + this->bnIntv20->Location = System::Drawing::Point(150, 44); + this->bnIntv20->Name = L"bnIntv20"; + this->bnIntv20->Size = System::Drawing::Size(75, 23); + this->bnIntv20->TabIndex = 6; + this->bnIntv20->Text = L"Interval 20"; + this->bnIntv20->Click += gcnew System::EventHandler(this, &Form1::bnIntv20_Click); + // + // bnIntv15 + // + this->bnIntv15->Location = System::Drawing::Point(150, 15); + this->bnIntv15->Name = L"bnIntv15"; + this->bnIntv15->Size = System::Drawing::Size(75, 23); + this->bnIntv15->TabIndex = 5; + this->bnIntv15->Text = L"Interval 15"; + this->bnIntv15->Click += gcnew System::EventHandler(this, &Form1::bnIntv15_Click); + // + // bnStop + // + this->bnStop->Location = System::Drawing::Point(32, 44); + this->bnStop->Name = L"bnStop"; + this->bnStop->Size = System::Drawing::Size(75, 23); + this->bnStop->TabIndex = 7; + this->bnStop->Text = L"Stop"; + this->bnStop->Click += gcnew System::EventHandler(this, &Form1::bnStop_Click); + // + // bnStart + // + this->bnStart->Location = System::Drawing::Point(32, 15); + this->bnStart->Name = L"bnStart"; + this->bnStart->Size = System::Drawing::Size(75, 23); + this->bnStart->TabIndex = 4; + this->bnStart->Text = L"Start"; + this->bnStart->Click += gcnew System::EventHandler(this, &Form1::bnStart_Click); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(256, 83); + this->Controls->Add(this->bnIntv20); + this->Controls->Add(this->bnIntv15); + this->Controls->Add(this->bnStop); + this->Controls->Add(this->bnStart); + this->Name = L"Form1"; + this->Text = L"SimpleWinService Controller"; + this->ResumeLayout(false); + + } +#pragma endregion + + private: + System::Void bnStart_Click(System::Object^ sender, System::EventArgs^ e) + { + serviceController1->Refresh(); + + if (serviceController1->Status == ServiceControllerStatus::Stopped) + { + serviceController1->Start(); + MessageBox::Show("SimpleWinService Started"); + } + else + { + MessageBox::Show("SimpleWinService Running"); + } + } + + System::Void bnStop_Click(System::Object^ sender, System::EventArgs^ e) + { + serviceController1->Refresh(); + + if (serviceController1->Status == ServiceControllerStatus::Running) + { + serviceController1->Stop(); + MessageBox::Show("SimpleWinService Stopped"); + } + else + { + MessageBox::Show("SimpleWinService Not Running"); + } + } + + System::Void bnIntv15_Click(System::Object^ sender, System::EventArgs^ e) + { + serviceController1->Refresh(); + + if (serviceController1->Status == ServiceControllerStatus::Running) + { + serviceController1->ExecuteCommand(150); + MessageBox::Show("SimpleWinService Interval in 15 seconds"); + } + else + { + MessageBox::Show("SimpleWinService Not Running"); + } + } + + System::Void bnIntv20_Click(System::Object^ sender, System::EventArgs^ e) + { + serviceController1->Refresh(); + + if (serviceController1->Status == ServiceControllerStatus::Running) + { + serviceController1->ExecuteCommand(200); + MessageBox::Show("SimpleWinService Interval in 20 seconds"); + } + else + { + MessageBox::Show("SimpleWinService Not Running"); + } + } + }; +} + diff --git a/Chapter14/SimpleCtrl/Form1.resx b/Chapter14/SimpleCtrl/Form1.resx new file mode 100644 index 0000000..38ccc8d --- /dev/null +++ b/Chapter14/SimpleCtrl/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter14/SimpleCtrl/SimpleCtrl.cpp b/Chapter14/SimpleCtrl/SimpleCtrl.cpp new file mode 100644 index 0000000..cbd7986 --- /dev/null +++ b/Chapter14/SimpleCtrl/SimpleCtrl.cpp @@ -0,0 +1,16 @@ +// SimpleCtrl.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace SimpleCtrl; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter14/SimpleCtrl/SimpleCtrl.vcproj b/Chapter14/SimpleCtrl/SimpleCtrl.vcproj new file mode 100644 index 0000000..a3b4f1b --- /dev/null +++ b/Chapter14/SimpleCtrl/SimpleCtrl.vcproj @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter14/SimpleCtrl/stdafx.cpp b/Chapter14/SimpleCtrl/stdafx.cpp new file mode 100644 index 0000000..b139169 --- /dev/null +++ b/Chapter14/SimpleCtrl/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SimpleCtrl.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter14/SimpleCtrl/stdafx.h b/Chapter14/SimpleCtrl/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter14/SimpleCtrl/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter15/AuthorWS/AssemblyInfo.cpp b/Chapter15/AuthorWS/AssemblyInfo.cpp new file mode 100644 index 0000000..40fb432 --- /dev/null +++ b/Chapter15/AuthorWS/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("AuthorWS")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("AuthorWS")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter15/AuthorWS/AuthorWS.asmx b/Chapter15/AuthorWS/AuthorWS.asmx new file mode 100644 index 0000000..05d4928 --- /dev/null +++ b/Chapter15/AuthorWS/AuthorWS.asmx @@ -0,0 +1,2 @@ +<%@ WebService Class=AuthorWS.AuthorWSClass %> + diff --git a/Chapter15/AuthorWS/AuthorWS.vcproj b/Chapter15/AuthorWS/AuthorWS.vcproj new file mode 100644 index 0000000..c43bd62 --- /dev/null +++ b/Chapter15/AuthorWS/AuthorWS.vcproj @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter15/AuthorWS/AuthorWSClass.cpp b/Chapter15/AuthorWS/AuthorWSClass.cpp new file mode 100644 index 0000000..98509d6 --- /dev/null +++ b/Chapter15/AuthorWS/AuthorWSClass.cpp @@ -0,0 +1,49 @@ +// AuthorWS.cpp : main project file. + +#include "stdafx.h" +#include "AuthorWSClass.h" +#include "Global.asax.h" + + +namespace AuthorWS +{ + DataSet^ AuthorWSClass::GetAuthors() + { + SqlDataAdapter ^dAdapt; + DataSet ^dSet; + + dAdapt = gcnew SqlDataAdapter(); + dAdapt->MissingSchemaAction = MissingSchemaAction::AddWithKey; + + dAdapt->SelectCommand = gcnew SqlCommand("SELECT AuthorID, LastName, FirstName FROM Authors", sqlConnection); + + dSet = gcnew DataSet(); + dAdapt->Fill(dSet, "Authors"); + + return dSet; + } + +void AuthorWSClass::UpdateAuthors(DataSet ^dSet) +{ + SqlDataAdapter ^dAdapt; + + dAdapt = gcnew SqlDataAdapter(); + dAdapt->MissingSchemaAction = MissingSchemaAction::AddWithKey; + + dAdapt->InsertCommand = gcnew SqlCommand("INSERT INTO Authors (LastName, FirstName) " + "VALUES (@LastName, @FirstName)", sqlConnection); + dAdapt->InsertCommand->Parameters->Add("@LastName", SqlDbType::VarChar, 50, "LastName"); + dAdapt->InsertCommand->Parameters->Add("@FirstName", SqlDbType::VarChar, 50, "FirstName"); + + dAdapt->UpdateCommand = gcnew SqlCommand("UPDATE Authors SET LastName = @LastName, FirstName = @FirstName " + "WHERE AuthorID = @AuthorID", sqlConnection); + dAdapt->UpdateCommand->Parameters->Add("@LastName", SqlDbType::VarChar, 50, "LastName"); + dAdapt->UpdateCommand->Parameters->Add("@FirstName", SqlDbType::VarChar, 50, "FirstName"); + dAdapt->UpdateCommand->Parameters->Add("@AuthorID", SqlDbType::Int, 4, "AuthorID"); + + dAdapt->DeleteCommand = gcnew SqlCommand("DELETE FROM Authors WHERE AuthorID = @AuthorID", sqlConnection); + dAdapt->DeleteCommand->Parameters->Add("@AuthorID", SqlDbType::Int, 4, "AuthorID"); + + dAdapt->Update(dSet, "Authors"); + } +}; diff --git a/Chapter15/AuthorWS/AuthorWSClass.h b/Chapter15/AuthorWS/AuthorWSClass.h new file mode 100644 index 0000000..b82b7d7 --- /dev/null +++ b/Chapter15/AuthorWS/AuthorWSClass.h @@ -0,0 +1,61 @@ +// AuthorWSClass.h + +#pragma once + +using namespace System; +using namespace System::Data; +using namespace System::Data::SqlClient; +using namespace System::Web; +using namespace System::Web::Services; + +namespace AuthorWS { + + [WebServiceBinding(ConformsTo=WsiProfiles::BasicProfile1_1, + EmitConformanceClaims = true)] + [WebService(Namespace="http://managedcpp.net", + Description = "Author table access Web Service")] + public ref class AuthorWSClass : public System::Web::Services::WebService + { + + public: + AuthorWSClass() + { + InitializeComponent(); + } + + protected: + ~AuthorWSClass() + { + if (components) + { + delete components; + } + } + + private: + System::Data::SqlClient::SqlConnection^ sqlConnection; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent() + { + this->sqlConnection = gcnew System::Data::SqlClient::SqlConnection(); + // + // sqlConnection + // + this->sqlConnection->ConnectionString = L"Server=Amidala;Integrated Security=True;Database=DCV_DB"; + + this->sqlConnection->FireInfoMessageEventOnUserErrors = false; + } + +#pragma endregion + + public: + [WebMethod(Description = "Method to retrieve All Authors from the database")] + DataSet ^GetAuthors(); + + [WebMethod(Description = "Method to Commit changed made on client with Server database")] + void UpdateAuthors(DataSet ^dSet); + }; +} diff --git a/Chapter15/AuthorWS/Global.asax b/Chapter15/AuthorWS/Global.asax new file mode 100644 index 0000000..2bc4a71 --- /dev/null +++ b/Chapter15/AuthorWS/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.h" Inherits="AuthorWS.Global" %> diff --git a/Chapter15/AuthorWS/Global.asax.h b/Chapter15/AuthorWS/Global.asax.h new file mode 100644 index 0000000..175dbc7 --- /dev/null +++ b/Chapter15/AuthorWS/Global.asax.h @@ -0,0 +1,47 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Web; +using namespace System::Collections; +using namespace System::ComponentModel; +using namespace System::Web::SessionState; + +namespace AuthorWS { + + /// + /// Summary description for Global. + /// + public ref class Global : public System::Web::HttpApplication + { + protected: + void Application_Start(Object ^sender, EventArgs ^e) + { + + } + + void Session_Start(Object ^sender, EventArgs ^e) + { + + } + + void Application_BeginRequest(Object ^sender, EventArgs ^e) + { + + } + + void Application_EndRequest(Object ^sender, EventArgs ^e) + { + + } + + void Session_End(Object ^sender, EventArgs ^e) + { + + } + + void Application_End(Object ^sender, EventArgs ^e) + { + + } + }; +} diff --git a/Chapter15/AuthorWS/Web.config b/Chapter15/AuthorWS/Web.config new file mode 100644 index 0000000..4015a21 --- /dev/null +++ b/Chapter15/AuthorWS/Web.config @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter15/AuthorWS/stdafx.cpp b/Chapter15/AuthorWS/stdafx.cpp new file mode 100644 index 0000000..9f8cbcf --- /dev/null +++ b/Chapter15/AuthorWS/stdafx.cpp @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// AuthorWS.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff --git a/Chapter15/AuthorWS/stdafx.h b/Chapter15/AuthorWS/stdafx.h new file mode 100644 index 0000000..e16d986 --- /dev/null +++ b/Chapter15/AuthorWS/stdafx.h @@ -0,0 +1,7 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + diff --git a/Chapter15/Chapter15.sln b/Chapter15/Chapter15.sln new file mode 100644 index 0000000..377b436 --- /dev/null +++ b/Chapter15/Chapter15.sln @@ -0,0 +1,38 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FindZipCode", "FindZipCode\FindZipCode.vcproj", "{2D375A1D-4D62-47C2-B74E-D991BB107874}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZipCodeConsoleClient", "ZipCodeConsoleClient\ZipCodeConsoleClient.vcproj", "{8FDE3EE4-0FCB-4F40-AE91-E6B4FACEF235}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AuthorWS", "AuthorWS\AuthorWS.vcproj", "{AE8DD29F-92B7-499F-ADD4-184841D3626B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaintAuthors", "MaintAuthors\MaintAuthors.vcproj", "{2E1A13FE-3617-4CE3-9617-ACF9134393E5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2D375A1D-4D62-47C2-B74E-D991BB107874}.Debug|Win32.ActiveCfg = Debug|Win32 + {2D375A1D-4D62-47C2-B74E-D991BB107874}.Debug|Win32.Build.0 = Debug|Win32 + {2D375A1D-4D62-47C2-B74E-D991BB107874}.Release|Win32.ActiveCfg = Release|Win32 + {2D375A1D-4D62-47C2-B74E-D991BB107874}.Release|Win32.Build.0 = Release|Win32 + {8FDE3EE4-0FCB-4F40-AE91-E6B4FACEF235}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FDE3EE4-0FCB-4F40-AE91-E6B4FACEF235}.Debug|Win32.Build.0 = Debug|Win32 + {8FDE3EE4-0FCB-4F40-AE91-E6B4FACEF235}.Release|Win32.ActiveCfg = Release|Win32 + {8FDE3EE4-0FCB-4F40-AE91-E6B4FACEF235}.Release|Win32.Build.0 = Release|Win32 + {AE8DD29F-92B7-499F-ADD4-184841D3626B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AE8DD29F-92B7-499F-ADD4-184841D3626B}.Debug|Win32.Build.0 = Debug|Win32 + {AE8DD29F-92B7-499F-ADD4-184841D3626B}.Release|Win32.ActiveCfg = Release|Win32 + {AE8DD29F-92B7-499F-ADD4-184841D3626B}.Release|Win32.Build.0 = Release|Win32 + {2E1A13FE-3617-4CE3-9617-ACF9134393E5}.Debug|Win32.ActiveCfg = Debug|Win32 + {2E1A13FE-3617-4CE3-9617-ACF9134393E5}.Debug|Win32.Build.0 = Debug|Win32 + {2E1A13FE-3617-4CE3-9617-ACF9134393E5}.Release|Win32.ActiveCfg = Release|Win32 + {2E1A13FE-3617-4CE3-9617-ACF9134393E5}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter15/Chapter15.suo b/Chapter15/Chapter15.suo new file mode 100644 index 0000000000000000000000000000000000000000..33d9815b49943e49566d4e6ea6b579324e25d729 GIT binary patch literal 17408 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 ZCZ8{53lZPnvj*7Ti|zlXRF + diff --git a/Chapter15/FindZipCode/FindZipCode.vcproj b/Chapter15/FindZipCode/FindZipCode.vcproj new file mode 100644 index 0000000..1543d05 --- /dev/null +++ b/Chapter15/FindZipCode/FindZipCode.vcproj @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter15/FindZipCode/FindZipCodeClass.cpp b/Chapter15/FindZipCode/FindZipCodeClass.cpp new file mode 100644 index 0000000..96d1ddb --- /dev/null +++ b/Chapter15/FindZipCode/FindZipCodeClass.cpp @@ -0,0 +1,21 @@ +// FindZipCode.cpp : main project file. + +#include "stdafx.h" +#include "FindZipCodeClass.h" +#include "Global.asax.h" + + +namespace FindZipCode +{ + int FindZipCodeClass::GetZip(String ^city, String ^state) + { + // Obviously very simplified + if (city->Equals("Louisville") && state->Equals("KY")) + return 40241; + else if (city->Equals("San Jose") && state->Equals("CA")) + return 95138; + else + throw gcnew Exception("Zip Code not found"); + } +}; + diff --git a/Chapter15/FindZipCode/FindZipCodeClass.h b/Chapter15/FindZipCode/FindZipCodeClass.h new file mode 100644 index 0000000..cb81d24 --- /dev/null +++ b/Chapter15/FindZipCode/FindZipCodeClass.h @@ -0,0 +1,46 @@ +// FindZipCodeClass.h + +#pragma once + +using namespace System; +using namespace System::Web; +using namespace System::Web::Services; + +namespace FindZipCode { + + [WebServiceBinding(ConformsTo=WsiProfiles::BasicProfile1_1, + EmitConformanceClaims = true)] + [WebService(Namespace="http://managedcpp.net", + Description = "Zip code retrieval service")] + public ref class FindZipCodeClass : public WebService + { + + public: + FindZipCodeClass() + { + InitializeComponent(); + } + + protected: + ~FindZipCodeClass() + { + if (components) + { + delete components; + } + } + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent() + { + } +#pragma endregion + + public: + [WebMethod(Description = "Get the zip code from city and state")] + int GetZip(String ^city, String ^state); + }; +} diff --git a/Chapter15/FindZipCode/Global.asax b/Chapter15/FindZipCode/Global.asax new file mode 100644 index 0000000..28d16bc --- /dev/null +++ b/Chapter15/FindZipCode/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.h" Inherits="FindZipCode.Global" %> diff --git a/Chapter15/FindZipCode/Global.asax.h b/Chapter15/FindZipCode/Global.asax.h new file mode 100644 index 0000000..11b1e67 --- /dev/null +++ b/Chapter15/FindZipCode/Global.asax.h @@ -0,0 +1,47 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Web; +using namespace System::Collections; +using namespace System::ComponentModel; +using namespace System::Web::SessionState; + +namespace FindZipCode { + + /// + /// Summary description for Global. + /// + public ref class Global : public System::Web::HttpApplication + { + protected: + void Application_Start(Object ^sender, EventArgs ^e) + { + + } + + void Session_Start(Object ^sender, EventArgs ^e) + { + + } + + void Application_BeginRequest(Object ^sender, EventArgs ^e) + { + + } + + void Application_EndRequest(Object ^sender, EventArgs ^e) + { + + } + + void Session_End(Object ^sender, EventArgs ^e) + { + + } + + void Application_End(Object ^sender, EventArgs ^e) + { + + } + }; +} diff --git a/Chapter15/FindZipCode/Web.config b/Chapter15/FindZipCode/Web.config new file mode 100644 index 0000000..cd893c1 --- /dev/null +++ b/Chapter15/FindZipCode/Web.config @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter15/FindZipCode/stdafx.cpp b/Chapter15/FindZipCode/stdafx.cpp new file mode 100644 index 0000000..8c0328c --- /dev/null +++ b/Chapter15/FindZipCode/stdafx.cpp @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// FindZipCode.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff --git a/Chapter15/FindZipCode/stdafx.h b/Chapter15/FindZipCode/stdafx.h new file mode 100644 index 0000000..e16d986 --- /dev/null +++ b/Chapter15/FindZipCode/stdafx.h @@ -0,0 +1,7 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + diff --git a/Chapter15/MaintAuthors/AssemblyInfo.cpp b/Chapter15/MaintAuthors/AssemblyInfo.cpp new file mode 100644 index 0000000..a1ea1fc --- /dev/null +++ b/Chapter15/MaintAuthors/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("MaintAuthors")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("MaintAuthors")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter15/MaintAuthors/AuthorWS.h b/Chapter15/MaintAuthors/AuthorWS.h new file mode 100644 index 0000000..645bd26 --- /dev/null +++ b/Chapter15/MaintAuthors/AuthorWS.h @@ -0,0 +1,203 @@ +#pragma once + +#using +#using +#using +#using +#using +#using + +using namespace System::Security::Permissions; +[assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum, SkipVerification=false)]; +// +// This source code was auto-generated by wsdl, Version=2.0.50630.0. +// +namespace AuthorWS { + using namespace System::Diagnostics; + using namespace System::Web::Services; + using namespace System::ComponentModel; + using namespace System::Web::Services::Protocols; + using namespace System; + using namespace System::Xml::Serialization; + using namespace System::Data; + + using namespace System; + ref class AuthorWSClass; + ref class GetAuthorsCompletedEventArgs; + + + /// + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"wsdl", L"2.0.50630.0")] + public delegate System::Void GetAuthorsCompletedEventHandler(System::Object^ sender, AuthorWS::GetAuthorsCompletedEventArgs^ e); + + /// + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"wsdl", L"2.0.50630.0")] + public delegate System::Void UpdateAuthorsCompletedEventHandler(System::Object^ sender, System::ComponentModel::AsyncCompletedEventArgs^ e); + + /// + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"wsdl", L"2.0.50630.0"), + System::Diagnostics::DebuggerStepThroughAttribute, + System::ComponentModel::DesignerCategoryAttribute(L"code"), + System::Web::Services::WebServiceBindingAttribute(Name=L"AuthorWSClassSoap", Namespace=L"http://managedcpp.net")] + public ref class AuthorWSClass : public System::Web::Services::Protocols::SoapHttpClientProtocol { + + private: System::Threading::SendOrPostCallback^ GetAuthorsOperationCompleted; + + private: System::Threading::SendOrPostCallback^ UpdateAuthorsOperationCompleted; + + /// + public: event AuthorWS::GetAuthorsCompletedEventHandler^ GetAuthorsCompleted; + + /// + public: event AuthorWS::UpdateAuthorsCompletedEventHandler^ UpdateAuthorsCompleted; + + /// + public: AuthorWSClass(); + /// + public: [System::Web::Services::Protocols::SoapDocumentMethodAttribute(L"http://managedcpp.net/GetAuthors", RequestNamespace=L"http://managedcpp.net", + ResponseNamespace=L"http://managedcpp.net", Use=System::Web::Services::Description::SoapBindingUse::Literal, ParameterStyle=System::Web::Services::Protocols::SoapParameterStyle::Wrapped)] + System::Data::DataSet^ GetAuthors(); + + /// + public: System::IAsyncResult^ BeginGetAuthors(System::AsyncCallback^ callback, System::Object^ asyncState); + + /// + public: System::Data::DataSet^ EndGetAuthors(System::IAsyncResult^ asyncResult); + + /// + public: System::Void GetAuthorsAsync(); + + /// + public: System::Void GetAuthorsAsync(System::Object^ userState); + + private: System::Void OnGetAuthorsOperationCompleted(System::Object^ arg); + + /// + public: [System::Web::Services::Protocols::SoapDocumentMethodAttribute(L"http://managedcpp.net/UpdateAuthors", RequestNamespace=L"http://managedcpp.net", + ResponseNamespace=L"http://managedcpp.net", Use=System::Web::Services::Description::SoapBindingUse::Literal, ParameterStyle=System::Web::Services::Protocols::SoapParameterStyle::Wrapped)] + System::Void UpdateAuthors(System::Data::DataSet^ dSet); + + /// + public: System::IAsyncResult^ BeginUpdateAuthors(System::Data::DataSet^ dSet, System::AsyncCallback^ callback, + System::Object^ asyncState); + + /// + public: System::Void EndUpdateAuthors(System::IAsyncResult^ asyncResult); + + /// + public: System::Void UpdateAuthorsAsync(System::Data::DataSet^ dSet); + + /// + public: System::Void UpdateAuthorsAsync(System::Data::DataSet^ dSet, System::Object^ userState); + + private: System::Void OnUpdateAuthorsOperationCompleted(System::Object^ arg); + + /// + public: System::Void CancelAsync(System::Object^ userState) new; + }; + + /// + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"wsdl", L"2.0.50630.0"), + System::Diagnostics::DebuggerStepThroughAttribute, + System::ComponentModel::DesignerCategoryAttribute(L"code")] + public ref class GetAuthorsCompletedEventArgs : public System::ComponentModel::AsyncCompletedEventArgs { + + private: cli::array< System::Object^ >^ results; + + internal: GetAuthorsCompletedEventArgs(cli::array< System::Object^ >^ results, System::Exception^ exception, System::Boolean cancelled, + System::Object^ userState); + /// + public: property System::Data::DataSet^ Result { + System::Data::DataSet^ get(); + } + }; +} +namespace AuthorWS { + + + inline AuthorWSClass::AuthorWSClass() { + this->Url = L"http://localhost/AuthorWS/AuthorWS.asmx"; + } + + inline System::Data::DataSet^ AuthorWSClass::GetAuthors() { + cli::array< System::Object^ >^ results = this->Invoke(L"GetAuthors", gcnew cli::array< System::Object^ >(0)); + return (cli::safe_cast(results[0])); + } + + inline System::IAsyncResult^ AuthorWSClass::BeginGetAuthors(System::AsyncCallback^ callback, System::Object^ asyncState) { + return this->BeginInvoke(L"GetAuthors", gcnew cli::array< System::Object^ >(0), callback, asyncState); + } + + inline System::Data::DataSet^ AuthorWSClass::EndGetAuthors(System::IAsyncResult^ asyncResult) { + cli::array< System::Object^ >^ results = this->EndInvoke(asyncResult); + return (cli::safe_cast(results[0])); + } + + inline System::Void AuthorWSClass::GetAuthorsAsync() { + this->GetAuthorsAsync(nullptr); + } + + inline System::Void AuthorWSClass::GetAuthorsAsync(System::Object^ userState) { + if (this->GetAuthorsOperationCompleted == nullptr) { + this->GetAuthorsOperationCompleted = gcnew System::Threading::SendOrPostCallback(this, &AuthorWS::AuthorWSClass::OnGetAuthorsOperationCompleted); + } + this->InvokeAsync(L"GetAuthors", gcnew cli::array< System::Object^ >(0), this->GetAuthorsOperationCompleted, userState); + } + + inline System::Void AuthorWSClass::OnGetAuthorsOperationCompleted(System::Object^ arg) { + { + System::Web::Services::Protocols::InvokeCompletedEventArgs^ invokeArgs = (cli::safe_cast(arg)); + this->GetAuthorsCompleted(this, (gcnew AuthorWS::GetAuthorsCompletedEventArgs(invokeArgs->Results, invokeArgs->Error, + invokeArgs->Cancelled, invokeArgs->UserState))); + } + } + + inline System::Void AuthorWSClass::UpdateAuthors(System::Data::DataSet^ dSet) { + this->Invoke(L"UpdateAuthors", gcnew cli::array< System::Object^ >(1) {dSet}); + } + + inline System::IAsyncResult^ AuthorWSClass::BeginUpdateAuthors(System::Data::DataSet^ dSet, System::AsyncCallback^ callback, + System::Object^ asyncState) { + return this->BeginInvoke(L"UpdateAuthors", gcnew cli::array< System::Object^ >(1) {dSet}, callback, asyncState); + } + + inline System::Void AuthorWSClass::EndUpdateAuthors(System::IAsyncResult^ asyncResult) { + this->EndInvoke(asyncResult); + } + + inline System::Void AuthorWSClass::UpdateAuthorsAsync(System::Data::DataSet^ dSet) { + this->UpdateAuthorsAsync(dSet, nullptr); + } + + inline System::Void AuthorWSClass::UpdateAuthorsAsync(System::Data::DataSet^ dSet, System::Object^ userState) { + if (this->UpdateAuthorsOperationCompleted == nullptr) { + this->UpdateAuthorsOperationCompleted = gcnew System::Threading::SendOrPostCallback(this, &AuthorWS::AuthorWSClass::OnUpdateAuthorsOperationCompleted); + } + this->InvokeAsync(L"UpdateAuthors", gcnew cli::array< System::Object^ >(1) {dSet}, this->UpdateAuthorsOperationCompleted, + userState); + } + + inline System::Void AuthorWSClass::OnUpdateAuthorsOperationCompleted(System::Object^ arg) { + { + System::Web::Services::Protocols::InvokeCompletedEventArgs^ invokeArgs = (cli::safe_cast(arg)); + this->UpdateAuthorsCompleted(this, (gcnew System::ComponentModel::AsyncCompletedEventArgs(invokeArgs->Error, invokeArgs->Cancelled, + invokeArgs->UserState))); + } + } + + inline System::Void AuthorWSClass::CancelAsync(System::Object^ userState) { + __super::CancelAsync(userState); + } + + + inline GetAuthorsCompletedEventArgs::GetAuthorsCompletedEventArgs(cli::array< System::Object^ >^ results, System::Exception^ exception, + System::Boolean cancelled, System::Object^ userState) : + System::ComponentModel::AsyncCompletedEventArgs(exception, cancelled, userState) { + this->results = results; + } + + inline System::Data::DataSet^ GetAuthorsCompletedEventArgs::Result::get() { + this->RaiseExceptionIfNecessary(); + return (cli::safe_cast(this->results[0])); + } +} diff --git a/Chapter15/MaintAuthors/AuthorWS/AuthorWS.disco b/Chapter15/MaintAuthors/AuthorWS/AuthorWS.disco new file mode 100644 index 0000000..d944cc4 --- /dev/null +++ b/Chapter15/MaintAuthors/AuthorWS/AuthorWS.disco @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Chapter15/MaintAuthors/AuthorWS/AuthorWS.wsdl b/Chapter15/MaintAuthors/AuthorWS/AuthorWS.wsdl new file mode 100644 index 0000000..8c9a43c --- /dev/null +++ b/Chapter15/MaintAuthors/AuthorWS/AuthorWS.wsdl @@ -0,0 +1,120 @@ + + + Author table access Web Service + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Method to retrieve All Authors from the database + + + + + Method to Commit changed made on client with Server database + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Author table access Web Service + + + + + + + + \ No newline at end of file diff --git a/Chapter15/MaintAuthors/AuthorWS/results.discomap b/Chapter15/MaintAuthors/AuthorWS/results.discomap new file mode 100644 index 0000000..9466cc8 --- /dev/null +++ b/Chapter15/MaintAuthors/AuthorWS/results.discomap @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Chapter15/MaintAuthors/Form1.h b/Chapter15/MaintAuthors/Form1.h new file mode 100644 index 0000000..e65c4ef --- /dev/null +++ b/Chapter15/MaintAuthors/Form1.h @@ -0,0 +1,306 @@ +#pragma once + + +namespace MaintAuthors { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + authors = gcnew AuthorWS::AuthorWSClass(); + dSet = authors->GetAuthors(); + + DataTable ^dt = dSet->Tables["Authors"]; + + if (dt == nullptr) + throw gcnew Exception("No Authors Table"); + + for each (DataRow ^row in dt->Rows::get()) + { + lbAuthors->Items->Add(ListBoxItem(row)); + } + + CurrentAuthorID = -1; + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Button^ bnRollback; + System::Windows::Forms::Button^ bnCommit; + System::Windows::Forms::Button^ bnDelete; + System::Windows::Forms::Button^ bnUpdate; + System::Windows::Forms::Button^ bnAdd; + System::Windows::Forms::ListBox^ lbAuthors; + System::Windows::Forms::TextBox^ tbLastName; + System::Windows::Forms::TextBox^ tbFirstName; + System::Windows::Forms::Label^ label2; + System::Windows::Forms::Label^ label1; + + System::ComponentModel::Container ^components; + + DataSet ^dSet; + int CurrentAuthorID; + AuthorWS::AuthorWSClass ^authors; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->bnRollback = (gcnew System::Windows::Forms::Button()); + this->bnCommit = (gcnew System::Windows::Forms::Button()); + this->bnDelete = (gcnew System::Windows::Forms::Button()); + this->bnUpdate = (gcnew System::Windows::Forms::Button()); + this->bnAdd = (gcnew System::Windows::Forms::Button()); + this->lbAuthors = (gcnew System::Windows::Forms::ListBox()); + this->tbLastName = (gcnew System::Windows::Forms::TextBox()); + this->tbFirstName = (gcnew System::Windows::Forms::TextBox()); + this->label2 = (gcnew System::Windows::Forms::Label()); + this->label1 = (gcnew System::Windows::Forms::Label()); + this->SuspendLayout(); + // + // bnRollback + // + this->bnRollback->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, + static_cast(0))); + this->bnRollback->Location = System::Drawing::Point(322, 168); + this->bnRollback->Name = L"bnRollback"; + this->bnRollback->Size = System::Drawing::Size(75, 23); + this->bnRollback->TabIndex = 29; + this->bnRollback->Text = L"Rollback"; + this->bnRollback->Click += gcnew System::EventHandler(this, &Form1::bnRollback_Click); + // + // bnCommit + // + this->bnCommit->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, + static_cast(0))); + this->bnCommit->Location = System::Drawing::Point(322, 138); + this->bnCommit->Margin = System::Windows::Forms::Padding(3, 0, 3, 3); + this->bnCommit->Name = L"bnCommit"; + this->bnCommit->Size = System::Drawing::Size(75, 23); + this->bnCommit->TabIndex = 28; + this->bnCommit->Text = L"Commit"; + this->bnCommit->Click += gcnew System::EventHandler(this, &Form1::bnCommit_Click); + // + // bnDelete + // + this->bnDelete->Location = System::Drawing::Point(322, 84); + this->bnDelete->Name = L"bnDelete"; + this->bnDelete->Size = System::Drawing::Size(75, 23); + this->bnDelete->TabIndex = 27; + this->bnDelete->Text = L"Delete"; + this->bnDelete->Click += gcnew System::EventHandler(this, &Form1::bnDelete_Click); + // + // bnUpdate + // + this->bnUpdate->Location = System::Drawing::Point(322, 52); + this->bnUpdate->Name = L"bnUpdate"; + this->bnUpdate->Size = System::Drawing::Size(75, 23); + this->bnUpdate->TabIndex = 26; + this->bnUpdate->Text = L"Update"; + this->bnUpdate->Click += gcnew System::EventHandler(this, &Form1::bnUpdate_Click); + // + // bnAdd + // + this->bnAdd->Location = System::Drawing::Point(322, 24); + this->bnAdd->Margin = System::Windows::Forms::Padding(3, 3, 3, 1); + this->bnAdd->Name = L"bnAdd"; + this->bnAdd->Size = System::Drawing::Size(75, 23); + this->bnAdd->TabIndex = 25; + this->bnAdd->Text = L"Add"; + this->bnAdd->Click += gcnew System::EventHandler(this, &Form1::bnAdd_Click); + // + // lbAuthors + // + this->lbAuthors->FormattingEnabled = true; + this->lbAuthors->Location = System::Drawing::Point(35, 101); + this->lbAuthors->Name = L"lbAuthors"; + this->lbAuthors->Size = System::Drawing::Size(257, 95); + this->lbAuthors->TabIndex = 24; + this->lbAuthors->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::lbAuthors_SelectedIndexChanged); + // + // tbLastName + // + this->tbLastName->Location = System::Drawing::Point(97, 57); + this->tbLastName->Margin = System::Windows::Forms::Padding(1, 3, 3, 3); + this->tbLastName->Name = L"tbLastName"; + this->tbLastName->Size = System::Drawing::Size(127, 20); + this->tbLastName->TabIndex = 23; + // + // tbFirstName + // + this->tbFirstName->Location = System::Drawing::Point(97, 30); + this->tbFirstName->Margin = System::Windows::Forms::Padding(1, 3, 3, 3); + this->tbFirstName->Name = L"tbFirstName"; + this->tbFirstName->Size = System::Drawing::Size(127, 20); + this->tbFirstName->TabIndex = 22; + // + // label2 + // + this->label2->AutoSize = true; + this->label2->Location = System::Drawing::Point(35, 63); + this->label2->Margin = System::Windows::Forms::Padding(3, 3, 2, 3); + this->label2->Name = L"label2"; + this->label2->Size = System::Drawing::Size(58, 13); + this->label2->TabIndex = 21; + this->label2->Text = L"Last Name"; + // + // label1 + // + this->label1->AutoSize = true; + this->label1->Location = System::Drawing::Point(35, 33); + this->label1->Margin = System::Windows::Forms::Padding(3, 3, 2, 3); + this->label1->Name = L"label1"; + this->label1->Size = System::Drawing::Size(57, 13); + this->label1->TabIndex = 20; + this->label1->Text = L"First Name"; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(432, 220); + this->Controls->Add(this->bnRollback); + this->Controls->Add(this->bnCommit); + this->Controls->Add(this->bnDelete); + this->Controls->Add(this->bnUpdate); + this->Controls->Add(this->bnAdd); + this->Controls->Add(this->lbAuthors); + this->Controls->Add(this->tbLastName); + this->Controls->Add(this->tbFirstName); + this->Controls->Add(this->label2); + this->Controls->Add(this->label1); + this->Name = L"Form1"; + this->Text = L"Maintain Authors using a Web Service"; + this->ResumeLayout(false); + this->PerformLayout(); + } + +#pragma endregion + + private: + String ^ListBoxItem(DataRow ^row) + { + return String::Format("{0} {1} {2}", + row["AuthorID"], + row["FirstName"], + row["LastName"]); + } + + System::Void bnRollback_Click(System::Object^ sender, System::EventArgs^ e) + { + dSet->RejectChanges(); + + lbAuthors->Items->Clear(); + + DataTable ^dt = dSet->Tables["Authors"]; + + for each (DataRow^ row in dt->Rows::get()) + { + lbAuthors->Items->Add(ListBoxItem(row)); + } + CurrentAuthorID = -1; + } + + System::Void bnCommit_Click(System::Object^ sender, System::EventArgs^ e) + { + authors->UpdateAuthors(dSet->GetChanges()); + dSet->AcceptChanges(); + + lbAuthors->Items->Clear(); + + DataTable ^dt = dSet->Tables["Authors"]; + + for each (DataRow^ row in dt->Rows::get()) + { + lbAuthors->Items->Add(ListBoxItem(row)); + } + CurrentAuthorID = -1; + } + + System::Void bnDelete_Click(System::Object^ sender, System::EventArgs^ e) + { + if (CurrentAuthorID < 0) + return; + + DataTable ^dt = dSet->Tables["Authors"]; + array^ row = dt->Select(String::Format("AuthorID={0}", CurrentAuthorID)); + + row[0]->Delete(); + + lbAuthors->Items->RemoveAt(lbAuthors->SelectedIndex); + } + + System::Void bnUpdate_Click(System::Object^ sender, System::EventArgs^ e) + { + if (CurrentAuthorID < 0) + return; + + DataTable ^dt = dSet->Tables["Authors"]; + array^ row = dt->Select(String::Format("AuthorID={0}", CurrentAuthorID)); + + row[0]["FirstName"] = tbFirstName->Text; + row[0]["LastName"] = tbLastName->Text; + + lbAuthors->Items->Insert(lbAuthors->SelectedIndex, ListBoxItem(row[0])); + lbAuthors->Items->RemoveAt(lbAuthors->SelectedIndex); + } + + System::Void bnAdd_Click(System::Object^ sender, System::EventArgs^ e) + { + if (tbFirstName->Text->Trim()->Length == 0 || + tbLastName->Text->Trim()->Length == 0) + return; + + DataTable ^dt = dSet->Tables["Authors"]; + + DataRow ^row = dt->NewRow(); + + row["FirstName"] = tbFirstName->Text; + row["LastName"] = tbLastName->Text; + + dt->Rows->Add(row); + + lbAuthors->Items->Add(ListBoxItem(row)); + + tbFirstName->Text = ""; + tbLastName->Text = ""; + } + + System::Void lbAuthors_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) + { + array^ ASpace = gcnew array{' '}; + + if (lbAuthors->SelectedItem == nullptr) + { + CurrentAuthorID = -1; + tbFirstName->Text = ""; + tbLastName->Text = ""; + return; + } + array^ split = lbAuthors->SelectedItem->ToString()->Split(ASpace); + + CurrentAuthorID = Convert::ToInt32(split[0]); + tbFirstName->Text = split[1]; + tbLastName->Text = split[2]; + } + }; +} + diff --git a/Chapter15/MaintAuthors/Form1.resx b/Chapter15/MaintAuthors/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter15/MaintAuthors/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter15/MaintAuthors/MaintAuthors.cpp b/Chapter15/MaintAuthors/MaintAuthors.cpp new file mode 100644 index 0000000..a28e145 --- /dev/null +++ b/Chapter15/MaintAuthors/MaintAuthors.cpp @@ -0,0 +1,16 @@ +// MaintAuthors.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace MaintAuthors; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter15/MaintAuthors/MaintAuthors.vcproj b/Chapter15/MaintAuthors/MaintAuthors.vcproj new file mode 100644 index 0000000..4d08392 --- /dev/null +++ b/Chapter15/MaintAuthors/MaintAuthors.vcproj @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter15/MaintAuthors/MaintAuthors.vcproj.vspscc b/Chapter15/MaintAuthors/MaintAuthors.vcproj.vspscc new file mode 100644 index 0000000..515391c --- /dev/null +++ b/Chapter15/MaintAuthors/MaintAuthors.vcproj.vspscc @@ -0,0 +1,11 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "1" +"EXCLUDED_FILE0" = "AuthorWS.h" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" +} diff --git a/Chapter15/MaintAuthors/stdafx.cpp b/Chapter15/MaintAuthors/stdafx.cpp new file mode 100644 index 0000000..198bfa9 --- /dev/null +++ b/Chapter15/MaintAuthors/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MaintAuthors.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter15/MaintAuthors/stdafx.h b/Chapter15/MaintAuthors/stdafx.h new file mode 100644 index 0000000..eb54e97 --- /dev/null +++ b/Chapter15/MaintAuthors/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here + +#include "WebService.h" \ No newline at end of file diff --git a/Chapter15/MaintAuthors/webservice.h b/Chapter15/MaintAuthors/webservice.h new file mode 100644 index 0000000..dd57fc9 --- /dev/null +++ b/Chapter15/MaintAuthors/webservice.h @@ -0,0 +1,2 @@ + +#include "AuthorWS.h" diff --git a/Chapter15/ZipCodeConsoleClient/AssemblyInfo.cpp b/Chapter15/ZipCodeConsoleClient/AssemblyInfo.cpp new file mode 100644 index 0000000..9ca2b81 --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ZipCodeConsoleClient")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ZipCodeConsoleClient")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter15/ZipCodeConsoleClient/FindZipCode.h b/Chapter15/ZipCodeConsoleClient/FindZipCode.h new file mode 100644 index 0000000..464928e --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/FindZipCode.h @@ -0,0 +1,142 @@ +#pragma once + +#using +#using +#using +#using +#using + +using namespace System::Security::Permissions; +[assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum, SkipVerification=false)]; +// +// This source code was auto-generated by wsdl, Version=2.0.50630.0. +// +namespace FindZipCode { + using namespace System::Diagnostics; + using namespace System::Web::Services; + using namespace System::ComponentModel; + using namespace System::Web::Services::Protocols; + using namespace System; + using namespace System::Xml::Serialization; + + using namespace System; + ref class FindZipCodeClass; + ref class GetZipCompletedEventArgs; + + + /// + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"wsdl", L"2.0.50630.0")] + public delegate System::Void GetZipCompletedEventHandler(System::Object^ sender, FindZipCode::GetZipCompletedEventArgs^ e); + + /// + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"wsdl", L"2.0.50630.0"), + System::Diagnostics::DebuggerStepThroughAttribute, + System::ComponentModel::DesignerCategoryAttribute(L"code"), + System::Web::Services::WebServiceBindingAttribute(Name=L"FindZipCodeClassSoap", Namespace=L"http://managedcpp.net")] + public ref class FindZipCodeClass : public System::Web::Services::Protocols::SoapHttpClientProtocol { + + private: System::Threading::SendOrPostCallback^ GetZipOperationCompleted; + + /// + public: event FindZipCode::GetZipCompletedEventHandler^ GetZipCompleted; + + /// + public: FindZipCodeClass(); + /// + public: [System::Web::Services::Protocols::SoapDocumentMethodAttribute(L"http://managedcpp.net/GetZip", RequestNamespace=L"http://managedcpp.net", + ResponseNamespace=L"http://managedcpp.net", Use=System::Web::Services::Description::SoapBindingUse::Literal, ParameterStyle=System::Web::Services::Protocols::SoapParameterStyle::Wrapped)] + System::Int32 GetZip(System::String^ city, System::String^ state); + + /// + public: System::IAsyncResult^ BeginGetZip(System::String^ city, System::String^ state, System::AsyncCallback^ callback, + System::Object^ asyncState); + + /// + public: System::Int32 EndGetZip(System::IAsyncResult^ asyncResult); + + /// + public: System::Void GetZipAsync(System::String^ city, System::String^ state); + + /// + public: System::Void GetZipAsync(System::String^ city, System::String^ state, System::Object^ userState); + + private: System::Void OnGetZipOperationCompleted(System::Object^ arg); + + /// + public: System::Void CancelAsync(System::Object^ userState) new; + }; + + /// + [System::CodeDom::Compiler::GeneratedCodeAttribute(L"wsdl", L"2.0.50630.0"), + System::Diagnostics::DebuggerStepThroughAttribute, + System::ComponentModel::DesignerCategoryAttribute(L"code")] + public ref class GetZipCompletedEventArgs : public System::ComponentModel::AsyncCompletedEventArgs { + + private: cli::array< System::Object^ >^ results; + + internal: GetZipCompletedEventArgs(cli::array< System::Object^ >^ results, System::Exception^ exception, System::Boolean cancelled, + System::Object^ userState); + /// + public: property System::Int32 Result { + System::Int32 get(); + } + }; +} +namespace FindZipCode { + + + inline FindZipCodeClass::FindZipCodeClass() { + this->Url = L"http://localhost/FindZipCode/FindZipCode.asmx"; + } + + inline System::Int32 FindZipCodeClass::GetZip(System::String^ city, System::String^ state) { + cli::array< System::Object^ >^ results = this->Invoke(L"GetZip", gcnew cli::array< System::Object^ >(2) {city, + state}); + return (*cli::safe_cast(results[0])); + } + + inline System::IAsyncResult^ FindZipCodeClass::BeginGetZip(System::String^ city, System::String^ state, System::AsyncCallback^ callback, + System::Object^ asyncState) { + return this->BeginInvoke(L"GetZip", gcnew cli::array< System::Object^ >(2) {city, state}, callback, asyncState); + } + + inline System::Int32 FindZipCodeClass::EndGetZip(System::IAsyncResult^ asyncResult) { + cli::array< System::Object^ >^ results = this->EndInvoke(asyncResult); + return (*cli::safe_cast(results[0])); + } + + inline System::Void FindZipCodeClass::GetZipAsync(System::String^ city, System::String^ state) { + this->GetZipAsync(city, state, nullptr); + } + + inline System::Void FindZipCodeClass::GetZipAsync(System::String^ city, System::String^ state, System::Object^ userState) { + if (this->GetZipOperationCompleted == nullptr) { + this->GetZipOperationCompleted = gcnew System::Threading::SendOrPostCallback(this, &FindZipCode::FindZipCodeClass::OnGetZipOperationCompleted); + } + this->InvokeAsync(L"GetZip", gcnew cli::array< System::Object^ >(2) {city, state}, this->GetZipOperationCompleted, userState); + } + + inline System::Void FindZipCodeClass::OnGetZipOperationCompleted(System::Object^ arg) { + { + System::Web::Services::Protocols::InvokeCompletedEventArgs^ invokeArgs = (cli::safe_cast(arg)); + this->GetZipCompleted(this, (gcnew FindZipCode::GetZipCompletedEventArgs(invokeArgs->Results, invokeArgs->Error, + invokeArgs->Cancelled, invokeArgs->UserState))); + } + } + + inline System::Void FindZipCodeClass::CancelAsync(System::Object^ userState) { + __super::CancelAsync(userState); + } + + + inline GetZipCompletedEventArgs::GetZipCompletedEventArgs(cli::array< System::Object^ >^ results, System::Exception^ exception, + System::Boolean cancelled, System::Object^ userState) : + System::ComponentModel::AsyncCompletedEventArgs(exception, cancelled, userState) { + this->results = results; + } + + inline System::Int32 GetZipCompletedEventArgs::Result::get() { + this->RaiseExceptionIfNecessary(); + return (*cli::safe_cast(this->results[0])); + } +} diff --git a/Chapter15/ZipCodeConsoleClient/FindZipCode/FindZipCode.disco b/Chapter15/ZipCodeConsoleClient/FindZipCode/FindZipCode.disco new file mode 100644 index 0000000..b0de888 --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/FindZipCode/FindZipCode.disco @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Chapter15/ZipCodeConsoleClient/FindZipCode/FindZipCode.wsdl b/Chapter15/ZipCodeConsoleClient/FindZipCode/FindZipCode.wsdl new file mode 100644 index 0000000..96e6db8 --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/FindZipCode/FindZipCode.wsdl @@ -0,0 +1,69 @@ + + + Zip code retrieval service + + + + + + + + + + + + + + + + + + + + + + + + + + + + Get the zip code from city and state + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Zip code retrieval service + + + + + + + + \ No newline at end of file diff --git a/Chapter15/ZipCodeConsoleClient/FindZipCode/results.discomap b/Chapter15/ZipCodeConsoleClient/FindZipCode/results.discomap new file mode 100644 index 0000000..bac5acf --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/FindZipCode/results.discomap @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.cpp b/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.cpp new file mode 100644 index 0000000..be5d712 --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.cpp @@ -0,0 +1,21 @@ +// ZipCodeConsoleClient.cpp : main project file. + +#include "stdafx.h" + +using namespace System; + +void main() +{ + FindZipCode::FindZipCodeClass ^fzc = gcnew FindZipCode::FindZipCodeClass(); + + try + { + Console::WriteLine(fzc->GetZip("Louisville", "KY").ToString()); + Console::WriteLine(fzc->GetZip("San Jose", "CA").ToString()); + Console::WriteLine(fzc->GetZip("xx", "cc").ToString()); + } + catch (Exception ^e) + { + Console::WriteLine(e->Message); + } +} diff --git a/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.vcproj b/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.vcproj new file mode 100644 index 0000000..002e218 --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.vcproj @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.vcproj.vspscc b/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.vcproj.vspscc new file mode 100644 index 0000000..112c03a --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/ZipCodeConsoleClient.vcproj.vspscc @@ -0,0 +1,11 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "1" +"EXCLUDED_FILE0" = "FindZipCode.h" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" +} diff --git a/Chapter15/ZipCodeConsoleClient/resource.h b/Chapter15/ZipCodeConsoleClient/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter15/ZipCodeConsoleClient/stdafx.cpp b/Chapter15/ZipCodeConsoleClient/stdafx.cpp new file mode 100644 index 0000000..1ea9cef --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ZipCodeConsoleClient.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter15/ZipCodeConsoleClient/stdafx.h b/Chapter15/ZipCodeConsoleClient/stdafx.h new file mode 100644 index 0000000..09ad803 --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/stdafx.h @@ -0,0 +1,10 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here + +#include "WebService.h" \ No newline at end of file diff --git a/Chapter15/ZipCodeConsoleClient/webservice.h b/Chapter15/ZipCodeConsoleClient/webservice.h new file mode 100644 index 0000000..d3b7b67 --- /dev/null +++ b/Chapter15/ZipCodeConsoleClient/webservice.h @@ -0,0 +1,3 @@ + +#include "FindZipCode.h" +#include "FindZipCode.h" diff --git a/Chapter16/AbortingThreads/AbortingThreads.cpp b/Chapter16/AbortingThreads/AbortingThreads.cpp new file mode 100644 index 0000000..9255bc7 --- /dev/null +++ b/Chapter16/AbortingThreads/AbortingThreads.cpp @@ -0,0 +1,56 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ +public: + static void ThreadFunc(Object ^Name); +}; + +void MyThread::ThreadFunc(Object ^Name) +{ + Thread ^thr = Thread::CurrentThread; + try + { + for (int i = 0; i < 100; i++) + { + Console::WriteLine("{0} {1}", Name, i.ToString()); + Thread::Sleep(1); + } + return; + } + catch (ThreadAbortException^) + { + Console::WriteLine("{0} Aborted", Name); + // Reset the abort so that the meoth will continue processing + // thr->ResetAbort(); + } +} + + +void main() +{ + Console::WriteLine("Main Program Starts"); + + Thread ^thr1 = gcnew Thread(gcnew ParameterizedThreadStart(&MyThread::ThreadFunc)); + Thread ^thr2 = gcnew Thread(gcnew ParameterizedThreadStart(&MyThread::ThreadFunc)); + + thr1->Start("Thread1"); + thr2->Start("Thread2"); + + Thread::Sleep(20); + thr1->Abort(); + Thread::Sleep(40); + thr2->Abort(); + + try + { + thr1->Start(); + } + catch (ThreadStateException ^tse) + { + Console::WriteLine(tse->ToString()); + } + + Console::WriteLine("Main Program Ends"); +} \ No newline at end of file diff --git a/Chapter16/AbortingThreads/AbortingThreads.vcproj b/Chapter16/AbortingThreads/AbortingThreads.vcproj new file mode 100644 index 0000000..7388b6a --- /dev/null +++ b/Chapter16/AbortingThreads/AbortingThreads.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/AbortingThreads/AbortingThreads.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/AbortingThreads/AbortingThreads.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/AbortingThreads/AbortingThreads.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/Chapter16.sln b/Chapter16/Chapter16.sln new file mode 100644 index 0000000..64dc7f6 --- /dev/null +++ b/Chapter16/Chapter16.sln @@ -0,0 +1,86 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StartingThreads", "StartingThreads\StartingThreads.vcproj", "{12E4D18A-0CC2-4DEC-80C3-CF619799E3EF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AbortingThreads", "AbortingThreads\AbortingThreads.vcproj", "{0365E0AB-D32A-4F52-9223-4C79B12D4CB5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SleepingThreads", "SleepingThreads\SleepingThreads.vcproj", "{3F5D8D39-3E7A-453C-BAF3-B037EC8D91CF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JoiningThreads", "JoiningThreads\JoiningThreads.vcproj", "{438199D3-8E2C-4D8D-AB7C-1E08608F61C8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ISRingThreads", "ISRingThreads\ISRingThreads.vcproj", "{466A40DE-9A2C-4369-8E3B-53CF577CABF0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ThreadPooling", "ThreadPooling\ThreadPooling.vcproj", "{A1B8A0EF-89C4-4F96-B9F7-A3A0FCE81983}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ThreadStaticVars", "ThreadStaticVars\ThreadStaticVars.vcproj", "{E775EDCF-8DBB-435A-A427-0DAD70909A6B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InterlockedVars", "InterlockedVars\InterlockedVars.vcproj", "{256A2DDF-3A2F-4E8A-92AD-329EFC7A1C73}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SyncByMonitor", "SyncByMonitor\SyncByMonitor.vcproj", "{2D6ED8F7-5967-487D-960C-C8157EDED988}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MutexSpawn", "MutexSpawn\MutexSpawn.vcproj", "{E6C613A3-6C7B-4163-A4FB-B50103CB83E1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SyncByMutex", "SyncByMutex\SyncByMutex.vcproj", "{4CDE32AF-A428-4A2C-9DD1-C9F27141C0F7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SyncByRWLock", "SyncByRWLock\SyncByRWLock.vcproj", "{C4200CD6-2FFC-43F1-BB05-8DD744324417}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {12E4D18A-0CC2-4DEC-80C3-CF619799E3EF}.Debug|Win32.ActiveCfg = Debug|Win32 + {12E4D18A-0CC2-4DEC-80C3-CF619799E3EF}.Debug|Win32.Build.0 = Debug|Win32 + {12E4D18A-0CC2-4DEC-80C3-CF619799E3EF}.Release|Win32.ActiveCfg = Release|Win32 + {12E4D18A-0CC2-4DEC-80C3-CF619799E3EF}.Release|Win32.Build.0 = Release|Win32 + {0365E0AB-D32A-4F52-9223-4C79B12D4CB5}.Debug|Win32.ActiveCfg = Debug|Win32 + {0365E0AB-D32A-4F52-9223-4C79B12D4CB5}.Debug|Win32.Build.0 = Debug|Win32 + {0365E0AB-D32A-4F52-9223-4C79B12D4CB5}.Release|Win32.ActiveCfg = Release|Win32 + {0365E0AB-D32A-4F52-9223-4C79B12D4CB5}.Release|Win32.Build.0 = Release|Win32 + {3F5D8D39-3E7A-453C-BAF3-B037EC8D91CF}.Debug|Win32.ActiveCfg = Debug|Win32 + {3F5D8D39-3E7A-453C-BAF3-B037EC8D91CF}.Debug|Win32.Build.0 = Debug|Win32 + {3F5D8D39-3E7A-453C-BAF3-B037EC8D91CF}.Release|Win32.ActiveCfg = Release|Win32 + {3F5D8D39-3E7A-453C-BAF3-B037EC8D91CF}.Release|Win32.Build.0 = Release|Win32 + {438199D3-8E2C-4D8D-AB7C-1E08608F61C8}.Debug|Win32.ActiveCfg = Debug|Win32 + {438199D3-8E2C-4D8D-AB7C-1E08608F61C8}.Debug|Win32.Build.0 = Debug|Win32 + {438199D3-8E2C-4D8D-AB7C-1E08608F61C8}.Release|Win32.ActiveCfg = Release|Win32 + {438199D3-8E2C-4D8D-AB7C-1E08608F61C8}.Release|Win32.Build.0 = Release|Win32 + {466A40DE-9A2C-4369-8E3B-53CF577CABF0}.Debug|Win32.ActiveCfg = Debug|Win32 + {466A40DE-9A2C-4369-8E3B-53CF577CABF0}.Debug|Win32.Build.0 = Debug|Win32 + {466A40DE-9A2C-4369-8E3B-53CF577CABF0}.Release|Win32.ActiveCfg = Release|Win32 + {466A40DE-9A2C-4369-8E3B-53CF577CABF0}.Release|Win32.Build.0 = Release|Win32 + {A1B8A0EF-89C4-4F96-B9F7-A3A0FCE81983}.Debug|Win32.ActiveCfg = Debug|Win32 + {A1B8A0EF-89C4-4F96-B9F7-A3A0FCE81983}.Debug|Win32.Build.0 = Debug|Win32 + {A1B8A0EF-89C4-4F96-B9F7-A3A0FCE81983}.Release|Win32.ActiveCfg = Release|Win32 + {A1B8A0EF-89C4-4F96-B9F7-A3A0FCE81983}.Release|Win32.Build.0 = Release|Win32 + {E775EDCF-8DBB-435A-A427-0DAD70909A6B}.Debug|Win32.ActiveCfg = Debug|Win32 + {E775EDCF-8DBB-435A-A427-0DAD70909A6B}.Debug|Win32.Build.0 = Debug|Win32 + {E775EDCF-8DBB-435A-A427-0DAD70909A6B}.Release|Win32.ActiveCfg = Release|Win32 + {E775EDCF-8DBB-435A-A427-0DAD70909A6B}.Release|Win32.Build.0 = Release|Win32 + {256A2DDF-3A2F-4E8A-92AD-329EFC7A1C73}.Debug|Win32.ActiveCfg = Debug|Win32 + {256A2DDF-3A2F-4E8A-92AD-329EFC7A1C73}.Debug|Win32.Build.0 = Debug|Win32 + {256A2DDF-3A2F-4E8A-92AD-329EFC7A1C73}.Release|Win32.ActiveCfg = Release|Win32 + {256A2DDF-3A2F-4E8A-92AD-329EFC7A1C73}.Release|Win32.Build.0 = Release|Win32 + {2D6ED8F7-5967-487D-960C-C8157EDED988}.Debug|Win32.ActiveCfg = Debug|Win32 + {2D6ED8F7-5967-487D-960C-C8157EDED988}.Debug|Win32.Build.0 = Debug|Win32 + {2D6ED8F7-5967-487D-960C-C8157EDED988}.Release|Win32.ActiveCfg = Release|Win32 + {2D6ED8F7-5967-487D-960C-C8157EDED988}.Release|Win32.Build.0 = Release|Win32 + {E6C613A3-6C7B-4163-A4FB-B50103CB83E1}.Debug|Win32.ActiveCfg = Debug|Win32 + {E6C613A3-6C7B-4163-A4FB-B50103CB83E1}.Debug|Win32.Build.0 = Debug|Win32 + {E6C613A3-6C7B-4163-A4FB-B50103CB83E1}.Release|Win32.ActiveCfg = Release|Win32 + {E6C613A3-6C7B-4163-A4FB-B50103CB83E1}.Release|Win32.Build.0 = Release|Win32 + {4CDE32AF-A428-4A2C-9DD1-C9F27141C0F7}.Debug|Win32.ActiveCfg = Debug|Win32 + {4CDE32AF-A428-4A2C-9DD1-C9F27141C0F7}.Debug|Win32.Build.0 = Debug|Win32 + {4CDE32AF-A428-4A2C-9DD1-C9F27141C0F7}.Release|Win32.ActiveCfg = Release|Win32 + {4CDE32AF-A428-4A2C-9DD1-C9F27141C0F7}.Release|Win32.Build.0 = Release|Win32 + {C4200CD6-2FFC-43F1-BB05-8DD744324417}.Debug|Win32.ActiveCfg = Debug|Win32 + {C4200CD6-2FFC-43F1-BB05-8DD744324417}.Debug|Win32.Build.0 = Debug|Win32 + {C4200CD6-2FFC-43F1-BB05-8DD744324417}.Release|Win32.ActiveCfg = Release|Win32 + {C4200CD6-2FFC-43F1-BB05-8DD744324417}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter16/Chapter16.suo b/Chapter16/Chapter16.suo new file mode 100644 index 0000000000000000000000000000000000000000..116d6b54ea57f0da44554cc19b435db94ed31451 GIT binary patch literal 27648 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 literal 0 HcmV?d00001 diff --git a/Chapter16/ISRingThreads/ISRingThreads.cpp b/Chapter16/ISRingThreads/ISRingThreads.cpp new file mode 100644 index 0000000..94e5b06 --- /dev/null +++ b/Chapter16/ISRingThreads/ISRingThreads.cpp @@ -0,0 +1,61 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ +public: + static void ThreadFunc1(); + static void ThreadFunc2(); +}; + +void MyThread::ThreadFunc1() +{ + Console::WriteLine("Before long sleep"); + try + { + Thread::Sleep(Timeout::Infinite); + } + catch(ThreadInterruptedException^){/*continue processing*/} + Console::WriteLine("After long sleep"); +} + +void MyThread::ThreadFunc2() +{ + for (int i = 0; i < 5; i++) + { + Console::WriteLine("Thread {0}",i.ToString()); + Thread::Sleep(2); + } +} + + +void main() +{ + Thread ^thr1 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc1)); + Thread ^thr2 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc2)); + + Console::WriteLine("Sleep/interrupt thread"); + thr1->Start(); + + Thread::Sleep(4); + for (int i = 0; i < 4; i++) + { + Console::WriteLine("**Main2 {0}", i.ToString()); + Thread::Sleep(2); + } + thr1->Interrupt(); + thr1->Join(); + + Console::WriteLine("\nSuspend/resume thread"); + thr2->Start(); + + Thread::Sleep(8); + thr2->Suspend(); + + for (int i = 0; i < 4; i++) + { + Console::WriteLine("**Main1 {0}", i.ToString()); + Thread::Sleep(2); + } + thr2->Resume(); +} \ No newline at end of file diff --git a/Chapter16/ISRingThreads/ISRingThreads.vcproj b/Chapter16/ISRingThreads/ISRingThreads.vcproj new file mode 100644 index 0000000..88dd0fd --- /dev/null +++ b/Chapter16/ISRingThreads/ISRingThreads.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/ISRingThreads/ISRingThreads.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/ISRingThreads/ISRingThreads.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/ISRingThreads/ISRingThreads.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/InterlockedVars/InterlockedVars.cpp b/Chapter16/InterlockedVars/InterlockedVars.cpp new file mode 100644 index 0000000..6990ebd --- /dev/null +++ b/Chapter16/InterlockedVars/InterlockedVars.cpp @@ -0,0 +1,41 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ + static int iVal; + +public: + + static MyThread() + { + iVal = 5; + } + + void ThreadFunc(); +}; + +void MyThread::ThreadFunc() +{ + while (Interlocked::Increment(iVal) < 15) + { + Thread ^thr = Thread::CurrentThread; + Console::WriteLine("{0} {1}", thr->Name, iVal); + Thread::Sleep(1); + } +} + + +void main() +{ + MyThread ^myThr1 = gcnew MyThread(); + + Thread ^thr1 = gcnew Thread(gcnew ThreadStart(myThr1, &MyThread::ThreadFunc)); + Thread ^thr2 = gcnew Thread(gcnew ThreadStart(myThr1, &MyThread::ThreadFunc)); + + thr1->Name = "Thread1"; + thr2->Name = "Thread2"; + + thr1->Start(); + thr2->Start(); +} \ No newline at end of file diff --git a/Chapter16/InterlockedVars/InterlockedVars.vcproj b/Chapter16/InterlockedVars/InterlockedVars.vcproj new file mode 100644 index 0000000..e351f5d --- /dev/null +++ b/Chapter16/InterlockedVars/InterlockedVars.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/InterlockedVars/InterlockedVars.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/InterlockedVars/InterlockedVars.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/InterlockedVars/InterlockedVars.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/JoiningThreads/JoiningThreads.cpp b/Chapter16/JoiningThreads/JoiningThreads.cpp new file mode 100644 index 0000000..3ec15eb --- /dev/null +++ b/Chapter16/JoiningThreads/JoiningThreads.cpp @@ -0,0 +1,32 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ +public: + static void ThreadFunc(Object ^Name); +}; + +void MyThread::ThreadFunc(Object ^Name) +{ + for (int i = 0; i < 5; i++) + { + Console::WriteLine("{0} {1}", Name, i.ToString()); + Thread::Sleep(1); + } +} + +void main() +{ + Console::WriteLine("Before starting thread"); + + Thread ^thr1 = gcnew Thread(gcnew ParameterizedThreadStart(&MyThread::ThreadFunc)); + Thread ^thr2 = gcnew Thread(gcnew ParameterizedThreadStart(&MyThread::ThreadFunc)); + + thr1->Start("Thread1"); + thr1->Join(); + + thr2->Start("Thread2"); + + Console::WriteLine("End of Main"); +} \ No newline at end of file diff --git a/Chapter16/JoiningThreads/JoiningThreads.vcproj b/Chapter16/JoiningThreads/JoiningThreads.vcproj new file mode 100644 index 0000000..c553df3 --- /dev/null +++ b/Chapter16/JoiningThreads/JoiningThreads.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/JoiningThreads/JoiningThreads.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/JoiningThreads/JoiningThreads.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/JoiningThreads/JoiningThreads.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/MutexSpawn/MutexSpawn.cpp b/Chapter16/MutexSpawn/MutexSpawn.cpp new file mode 100644 index 0000000..e01873f --- /dev/null +++ b/Chapter16/MutexSpawn/MutexSpawn.cpp @@ -0,0 +1,23 @@ +using namespace System; +using namespace System::Diagnostics; +using namespace System::Threading; + + +void main() +{ + Process^ proc1 = gcnew Process(); + proc1->StartInfo->FileName = "../debug/SyncByMutex.exe"; + proc1->StartInfo->Arguments = "1"; + proc1->StartInfo->UseShellExecute = false; + proc1->StartInfo->RedirectStandardInput = true; + proc1->Start(); + + Process^ proc2 = gcnew Process(); + proc2->StartInfo->FileName = "../debug/SyncByMutex.exe"; + proc2->StartInfo->Arguments = "2"; + proc2->StartInfo->UseShellExecute = false; + proc2->StartInfo->RedirectStandardInput = true; + proc2->Start(); + + Thread::Sleep(5000); // Added just to clean up console display +} \ No newline at end of file diff --git a/Chapter16/MutexSpawn/MutexSpawn.vcproj b/Chapter16/MutexSpawn/MutexSpawn.vcproj new file mode 100644 index 0000000..08f10f8 --- /dev/null +++ b/Chapter16/MutexSpawn/MutexSpawn.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/MutexSpawn/MutexSpawn.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/MutexSpawn/MutexSpawn.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/MutexSpawn/MutexSpawn.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/SleepingThreads/SleepingThreads.cpp b/Chapter16/SleepingThreads/SleepingThreads.cpp new file mode 100644 index 0000000..2d4ca1d --- /dev/null +++ b/Chapter16/SleepingThreads/SleepingThreads.cpp @@ -0,0 +1,41 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ +public: + static void ThreadFunc(); +}; + +void MyThread::ThreadFunc() +{ + for (int i = 0; i < 101; i++) + { + Thread ^thr = Thread::CurrentThread; + if (i % 10 == 0) + Console::WriteLine("{0} {1}", thr->Name, i.ToString()); + Thread::Sleep(10); + } +} + + +void main() +{ + Console::WriteLine("Main Program Starts"); + + Thread ^thr1 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc)); + Thread ^thr2 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc)); + + thr1->Name = "Thread1"; + thr2->Name = "Thread2"; + + thr1->Start(); + thr2->Start(); + + int iHour = 0; + int iMin = 0; + int iSec = 1; + Thread::Sleep(TimeSpan(iHour, iMin, iSec)); + + Console::WriteLine("Main Program Ends"); +} \ No newline at end of file diff --git a/Chapter16/SleepingThreads/SleepingThreads.vcproj b/Chapter16/SleepingThreads/SleepingThreads.vcproj new file mode 100644 index 0000000..8ad1754 --- /dev/null +++ b/Chapter16/SleepingThreads/SleepingThreads.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/SleepingThreads/SleepingThreads.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/SleepingThreads/SleepingThreads.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/SleepingThreads/SleepingThreads.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/StartingThreads/StartingThreads.cpp b/Chapter16/StartingThreads/StartingThreads.cpp new file mode 100644 index 0000000..f62f66d --- /dev/null +++ b/Chapter16/StartingThreads/StartingThreads.cpp @@ -0,0 +1,54 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ +public: + static void StaticThread(); + void NonStaticThread(Object ^name); +}; + +void MyThread::StaticThread() +{ + for (int i = 0; i < 50000001; i++) + { + if (i % 10000000 == 0) + Console::WriteLine("Static Thread {0}", i.ToString()); + } +} + +void MyThread::NonStaticThread(Object ^name) +{ + for (int i = 0; i < 50000001; i++) + { + if (i % 10000000 == 0) + Console::WriteLine("Member {0} Thread {1}", + name, // Parameter passed + i.ToString()); + } +} + +void main() +{ + Console::WriteLine("Main Program Starts"); + + // Creating a thread start delegate for a static method + ThreadStart ^thrStart = gcnew ThreadStart(&MyThread::StaticThread); + // Use the ThreadStart to create a Thread pointer Object + Thread ^thr1 = gcnew Thread(thrStart); + + MyThread ^myThr = gcnew MyThread(); + // Creating a Thread reference object in one line from a member method + Thread ^thr2 = gcnew Thread( + gcnew ParameterizedThreadStart(myThr, &MyThread::NonStaticThread)); + +// Uncomment for background vs foreground exploration +// thr1->IsBackground = true; +// thr2->IsBackground = true; + + // Actually starting the pointer and reference threads + thr1->Start(); + thr2->Start("Parameterized"); + + Console::WriteLine("Main Program Ends"); +} \ No newline at end of file diff --git a/Chapter16/StartingThreads/StartingThreads.vcproj b/Chapter16/StartingThreads/StartingThreads.vcproj new file mode 100644 index 0000000..b1cc836 --- /dev/null +++ b/Chapter16/StartingThreads/StartingThreads.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/StartingThreads/StartingThreads.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/StartingThreads/StartingThreads.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/StartingThreads/StartingThreads.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/SyncByMonitor/SyncByMonitor.cpp b/Chapter16/SyncByMonitor/SyncByMonitor.cpp new file mode 100644 index 0000000..4679b4a --- /dev/null +++ b/Chapter16/SyncByMonitor/SyncByMonitor.cpp @@ -0,0 +1,75 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ + static Object^ MonitorObject = gcnew Object(); + +public: + void TFuncOne(); + void TFuncTwo(); + void TFuncThree(); +}; + +void MyThread::TFuncOne() +{ + Console::WriteLine("TFuncOne enters monitor"); + Monitor::Enter(MonitorObject); + for (int i = 0; i < 3; i++) + { + Console::WriteLine("TFuncOne Waits {0}", i); + Monitor::Wait(MonitorObject); + Console::WriteLine("TFuncOne Pulses {0}", i); + Monitor::Pulse(MonitorObject); + Thread::Sleep(1); + } + Monitor::Exit(MonitorObject); + Console::WriteLine("TFuncOne exits monitor"); +} + +void MyThread::TFuncTwo() +{ + Console::WriteLine("TFuncTwo enters monitor"); + Monitor::Enter(MonitorObject); + for (int i = 0; i < 3; i++) + { + Console::WriteLine("TFuncTwo Pulses {0}", i); + Monitor::Pulse(MonitorObject); + Thread::Sleep(1); + Console::WriteLine("TFuncTwo Waits {0}", i); + Monitor::Wait(MonitorObject); + } + Monitor::Exit(MonitorObject); + Console::WriteLine("TFuncTwo exits monitor"); +} + +void MyThread::TFuncThree() +{ + if (!Monitor::TryEnter(MonitorObject)) + { + Console::WriteLine("TFuncThree was not able to lock"); + return; + } + Console::WriteLine("TFuncThree got a lock"); + + Monitor::Exit(MonitorObject); + Console::WriteLine("TFuncThree exits monitor"); +} + + +void main() +{ + MyThread ^myThr1 = gcnew MyThread(); + + (gcnew Thread(gcnew ThreadStart(myThr1, &MyThread::TFuncOne)))->Start(); + Thread::Sleep(2); + + (gcnew Thread(gcnew ThreadStart(myThr1, &MyThread::TFuncTwo)))->Start(); + Thread::Sleep(2); + + for (int i = 0; i < 2; i++) + { + (gcnew Thread(gcnew ThreadStart(myThr1, &MyThread::TFuncThree)))->Start(); + Thread::Sleep(50); + } +} \ No newline at end of file diff --git a/Chapter16/SyncByMonitor/SyncByMonitor.vcproj b/Chapter16/SyncByMonitor/SyncByMonitor.vcproj new file mode 100644 index 0000000..7d06c35 --- /dev/null +++ b/Chapter16/SyncByMonitor/SyncByMonitor.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/SyncByMonitor/SyncByMonitor.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/SyncByMonitor/SyncByMonitor.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/SyncByMonitor/SyncByMonitor.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/SyncByMutex/SyncByMutex.cpp b/Chapter16/SyncByMutex/SyncByMutex.cpp new file mode 100644 index 0000000..acac7e4 --- /dev/null +++ b/Chapter16/SyncByMutex/SyncByMutex.cpp @@ -0,0 +1,43 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ + static Mutex ^m = gcnew Mutex(false, "SyncByMutex"); +public: + static void ThreadFunc(); +}; + +void MyThread::ThreadFunc() +{ + Random^ Rand = gcnew Random; + + Thread ^thr = Thread::CurrentThread; + + for (int i = 0; i < 4; i++) + { + m->WaitOne(); + + Console::WriteLine("{0} Enter - {1}", thr->Name, i); + Thread::Sleep(Rand->Next(20, 100)); // Simulate Work + Console::WriteLine("{0} Exit - {1}", thr->Name, i); + m->ReleaseMutex(); + + Thread::Sleep(Rand->Next(20, 100)); + } +} + +int main(int argc, char *argv[]) +{ + MyThread ^myThr = gcnew MyThread(); + + Thread ^thr1 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc)); + Thread ^thr2 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc)); + + thr1->Name = String::Format("Process {0} - Thread 1", gcnew String(argv[1])); + thr2->Name = String::Format("Process {0} - Thread 2", gcnew String(argv[1])); + + thr1->Start(); + Thread::Sleep(50); + thr2->Start(); +} diff --git a/Chapter16/SyncByMutex/SyncByMutex.vcproj b/Chapter16/SyncByMutex/SyncByMutex.vcproj new file mode 100644 index 0000000..3d2dd6f --- /dev/null +++ b/Chapter16/SyncByMutex/SyncByMutex.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/SyncByMutex/SyncByMutex.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/SyncByMutex/SyncByMutex.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/SyncByMutex/SyncByMutex.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/SyncByRWLock/SyncByRWLock.cpp b/Chapter16/SyncByRWLock/SyncByRWLock.cpp new file mode 100644 index 0000000..1f7a2d8 --- /dev/null +++ b/Chapter16/SyncByRWLock/SyncByRWLock.cpp @@ -0,0 +1,69 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ + static ReaderWriterLock ^RWLock = gcnew ReaderWriterLock(); + static int iVal = 4; + +public: + static void ReaderThread(); + static void WriterThread(); +}; + +void MyThread::ReaderThread() +{ + String ^thrName = Thread::CurrentThread->Name; + while (true) + { + try + { + RWLock->AcquireReaderLock(2); + + Console::WriteLine("Reading in {0}. iVal is {1}", + thrName, iVal); + + RWLock->ReleaseReaderLock(); + Thread::Sleep(4); + } + catch (ApplicationException^) + { + Console::WriteLine("Reading in {0}. Timed out", thrName); + } + } +} + +void MyThread::WriterThread() +{ + while (iVal > 0) + { + RWLock->AcquireWriterLock(-1); + + Interlocked::Decrement(iVal); + Console::WriteLine("Writing iVal to {0}", iVal); + Thread::Sleep(20); + + RWLock->ReleaseWriterLock(); + } +} + + +void main() +{ + Thread ^thr1 = gcnew Thread(gcnew ThreadStart(&MyThread::ReaderThread)); + Thread ^thr2 = gcnew Thread(gcnew ThreadStart(&MyThread::ReaderThread)); + Thread ^thr3 = gcnew Thread(gcnew ThreadStart(&MyThread::WriterThread)); + + thr1->Name = "Thread1"; + thr2->Name = "Thread2"; + + thr1->IsBackground = true; + thr2->IsBackground = true; + + thr1->Start(); + thr2->Start(); + thr3->Start(); + + thr3->Join(); + Thread::Sleep(2); +} \ No newline at end of file diff --git a/Chapter16/SyncByRWLock/SyncByRWLock.vcproj b/Chapter16/SyncByRWLock/SyncByRWLock.vcproj new file mode 100644 index 0000000..8ede595 --- /dev/null +++ b/Chapter16/SyncByRWLock/SyncByRWLock.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/SyncByRWLock/SyncByRWLock.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/SyncByRWLock/SyncByRWLock.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/SyncByRWLock/SyncByRWLock.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/ThreadPooling/ThreadPooling.cpp b/Chapter16/ThreadPooling/ThreadPooling.cpp new file mode 100644 index 0000000..c74cf7d --- /dev/null +++ b/Chapter16/ThreadPooling/ThreadPooling.cpp @@ -0,0 +1,31 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ +public: + void ThreadFunc(Object^ stateInfo); +}; + +void MyThread::ThreadFunc(Object^ stateInfo) +{ + for (int i = 0; i < 10; i++) + { + Console::WriteLine("{0} {1}", stateInfo, i.ToString()); + Thread::Sleep(100); + } +} + + +void main() +{ + Console::WriteLine("Main Program Starts"); + + MyThread ^myThr1 = gcnew MyThread(); + + ThreadPool::QueueUserWorkItem(gcnew WaitCallback(myThr1, &MyThread::ThreadFunc), "Thread1"); + ThreadPool::QueueUserWorkItem(gcnew WaitCallback(myThr1, &MyThread::ThreadFunc), "Thread2"); + + Thread::Sleep(2000); + Console::WriteLine("Main Program Ends"); +} \ No newline at end of file diff --git a/Chapter16/ThreadPooling/ThreadPooling.vcproj b/Chapter16/ThreadPooling/ThreadPooling.vcproj new file mode 100644 index 0000000..3983918 --- /dev/null +++ b/Chapter16/ThreadPooling/ThreadPooling.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/ThreadPooling/ThreadPooling.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/ThreadPooling/ThreadPooling.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/ThreadPooling/ThreadPooling.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter16/ThreadStaticVars/ThreadStaticVars.cpp b/Chapter16/ThreadStaticVars/ThreadStaticVars.cpp new file mode 100644 index 0000000..00828ac --- /dev/null +++ b/Chapter16/ThreadStaticVars/ThreadStaticVars.cpp @@ -0,0 +1,61 @@ +using namespace System; +using namespace System::Threading; + +ref class MyThread +{ +public: + + [ThreadStatic] + static int ^iVal; + +public: + static MyThread() + { + iVal = gcnew int; + } + + void ThreadFunc(); + void SubThreadFunc(); +}; + +void MyThread::ThreadFunc() +{ + iVal = gcnew int; + iVal = 7; + + SubThreadFunc(); +} + +void MyThread::SubThreadFunc() +{ + int max = *iVal + 5; + + while (*iVal < max) + { + Thread ^thr = Thread::CurrentThread; + Console::WriteLine("{0} {1}", thr->Name, iVal->ToString()); + Thread::Sleep(1); + (*iVal)++; + } +} + + +void main() +{ + Console::WriteLine("Before starting thread"); + + MyThread ^myThr1 = gcnew MyThread(); + + Thread ^thr1 = gcnew Thread(gcnew ThreadStart(myThr1, &MyThread::ThreadFunc)); + Thread ^thr2 = gcnew Thread(gcnew ThreadStart(myThr1, &MyThread::ThreadFunc)); + + Thread::CurrentThread->Name = "Main"; + thr1->Name = "Thread1"; + thr2->Name = "Thread2"; + + thr1->Start(); + thr2->Start(); + + myThr1->iVal = 5; + myThr1->SubThreadFunc(); +} \ No newline at end of file diff --git a/Chapter16/ThreadStaticVars/ThreadStaticVars.vcproj b/Chapter16/ThreadStaticVars/ThreadStaticVars.vcproj new file mode 100644 index 0000000..ad7cd35 --- /dev/null +++ b/Chapter16/ThreadStaticVars/ThreadStaticVars.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter16/ThreadStaticVars/ThreadStaticVars.vcproj.AMIDALA.Stephen Fraser.user b/Chapter16/ThreadStaticVars/ThreadStaticVars.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter16/ThreadStaticVars/ThreadStaticVars.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/Async_TcpServer/Async_TcpServer.vcproj b/Chapter17/Async_TcpServer/Async_TcpServer.vcproj new file mode 100644 index 0000000..1d6ae7e --- /dev/null +++ b/Chapter17/Async_TcpServer/Async_TcpServer.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/Async_TcpServer/Async_TcpServer.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/Async_TcpServer/Async_TcpServer.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/Async_TcpServer/Async_TcpServer.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/Async_TcpServer/TcpServer_Async.cpp b/Chapter17/Async_TcpServer/TcpServer_Async.cpp new file mode 100644 index 0000000..48f4798 --- /dev/null +++ b/Chapter17/Async_TcpServer/TcpServer_Async.cpp @@ -0,0 +1,104 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Threading; +using namespace System::Text; + +ref class StateObject +{ +public: + property int bufSize; + property Socket ^workSocket; + property array^ message; + + StateObject(Socket^ sock, int bufsize) + { + workSocket = sock; + bufSize = bufsize; + message = gcnew array(bufsize); + } +}; + +ref class TcpServer +{ +public: + static void AcceptCB(IAsyncResult^ iar); + static void SendCB(IAsyncResult^ iar); + static void ReceiveCB(IAsyncResult^ iar); +}; + +void TcpServer::AcceptCB(IAsyncResult^ iar) +{ + TcpListener^ tcpListener = (TcpListener^)iar->AsyncState; + Socket^ client = tcpListener->EndAcceptSocket(iar); + + IPEndPoint^ clientEP = (IPEndPoint^)client->RemoteEndPoint; + + Console::WriteLine("Connected on IP: {0} Port: {1}", + clientEP->Address, clientEP->Port); + + // Send socket successful connection message + array^ msg = Encoding::ASCII->GetBytes( + String::Format("Successfully connection to the server on port {0}", + clientEP->Port)); + client->BeginSend(msg, 0, msg->Length, SocketFlags::None, + gcnew AsyncCallback(&TcpServer::SendCB), client); + + // Get message from client + StateObject^ so = gcnew StateObject(client, 1024); + client->BeginReceive(so->message, 0, so->bufSize, + SocketFlags::None, gcnew AsyncCallback(&TcpServer::ReceiveCB), so); + + // Get the next socket connection + Console::WriteLine("Waiting for client connections. [Return to Exit]"); + tcpListener->BeginAcceptSocket(gcnew AsyncCallback(&TcpServer::AcceptCB), + tcpListener); +} + +void TcpServer::SendCB(IAsyncResult^ iar) +{ + Socket^ client = (Socket^)iar->AsyncState; + client->EndSend(iar); +} + +void TcpServer::ReceiveCB(IAsyncResult^ iar) +{ + StateObject^ so = (StateObject^)iar->AsyncState; + Socket^ client = so->workSocket; + IPEndPoint^ clientEP = (IPEndPoint^)client->RemoteEndPoint; + + int rcv; + if ((rcv = client->EndReceive(iar)) > 0) // get message + { + Console::WriteLine("Port[{0}] {1}", + clientEP->Port, Encoding::ASCII->GetString(so->message, 0, rcv)); + + // echo message + client->BeginSend(so->message, 0, rcv, SocketFlags::None, + gcnew AsyncCallback(&TcpServer::SendCB), client); + + // set up for next receive + so = gcnew StateObject(client, 1024); + client->BeginReceive(so->message, 0, so->bufSize, + SocketFlags::None, gcnew AsyncCallback(&TcpServer::ReceiveCB), so); + } + else // connection closed + { + client->Close(); + Console::WriteLine("Connection to IP: {0} Port {1} closed.", + clientEP->Address, clientEP->Port); + } +} + +void main() +{ + TcpListener^ socket = gcnew TcpListener(IPAddress::Any, 12345); + socket->Start(); + + Console::WriteLine("Waiting for client connections. [Return to Exit]"); + socket->BeginAcceptSocket(gcnew AsyncCallback(&TcpServer::AcceptCB), + socket); + + // Exit on return key + Console::ReadLine(); +} diff --git a/Chapter17/Chapter17.sln b/Chapter17/Chapter17.sln new file mode 100644 index 0000000..1cddd07 --- /dev/null +++ b/Chapter17/Chapter17.sln @@ -0,0 +1,104 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TcpExamples", "TcpExamples", "{262B74DC-AF8B-400B-8042-177E0FE07FC3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TcpServer", "TcpServer\TcpServer.vcproj", "{2DF10409-F3FD-40CC-827C-F58CBDD447D2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TcpClient", "TcpClient\TcpClient.vcproj", "{21186920-C26D-4DC7-A84E-15CFF728BEA9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UdpExamples", "UdpExamples", "{F66037C4-6C9A-4FBE-BDD4-46044ED1A2E2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UdpServer", "UdpServer\UdpServer.vcproj", "{680773DE-337A-481B-BEDE-C4EDE38458AE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UdpClient", "UdpClient\UdpClient.vcproj", "{80D51950-3950-490A-A413-C487099357E0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UDPConnect", "UDPConnect\UDPConnect.vcproj", "{5F0372B3-D304-413F-9F85-D7F521ADA1CE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TcpServer_Listener", "TcpServer_Listener\TcpServer_Listener.vcproj", "{4BE01550-900E-4EE7-80F1-E77727106545}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TcpServer_Stream", "TcpServer_Stream\TcpServer_Stream.vcproj", "{ADBFAC2E-BB43-4BB4-886D-EAD55D75BED8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TcpClient_Stream", "TcpClient_Stream\TcpClient_Stream.vcproj", "{A6DEC7F3-6890-4852-8B54-5D1B8380A98D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UdpServer_Helper", "UdpServer_Helper\UdpServer_Helper.vcproj", "{01F30092-DE91-49EF-ADBD-6D8227E5965E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UdpClient_Helper", "UdpClient_Helper\UdpClient_Helper.vcproj", "{E8E67426-A286-4250-A65F-7A9E4BB94B9B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UdpClient_Timeout", "UdpClient_Timeout\UdpClient_Timeout.vcproj", "{466B48CD-83CF-4A10-A236-7578C1E9E5C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TcpServer_Async", "Async_TcpServer\Async_TcpServer.vcproj", "{F1A2C267-0CA7-4DEC-961C-E04F0856652E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2DF10409-F3FD-40CC-827C-F58CBDD447D2}.Debug|Win32.ActiveCfg = Debug|Win32 + {2DF10409-F3FD-40CC-827C-F58CBDD447D2}.Debug|Win32.Build.0 = Debug|Win32 + {2DF10409-F3FD-40CC-827C-F58CBDD447D2}.Release|Win32.ActiveCfg = Release|Win32 + {2DF10409-F3FD-40CC-827C-F58CBDD447D2}.Release|Win32.Build.0 = Release|Win32 + {21186920-C26D-4DC7-A84E-15CFF728BEA9}.Debug|Win32.ActiveCfg = Debug|Win32 + {21186920-C26D-4DC7-A84E-15CFF728BEA9}.Debug|Win32.Build.0 = Debug|Win32 + {21186920-C26D-4DC7-A84E-15CFF728BEA9}.Release|Win32.ActiveCfg = Release|Win32 + {21186920-C26D-4DC7-A84E-15CFF728BEA9}.Release|Win32.Build.0 = Release|Win32 + {680773DE-337A-481B-BEDE-C4EDE38458AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {680773DE-337A-481B-BEDE-C4EDE38458AE}.Debug|Win32.Build.0 = Debug|Win32 + {680773DE-337A-481B-BEDE-C4EDE38458AE}.Release|Win32.ActiveCfg = Release|Win32 + {680773DE-337A-481B-BEDE-C4EDE38458AE}.Release|Win32.Build.0 = Release|Win32 + {80D51950-3950-490A-A413-C487099357E0}.Debug|Win32.ActiveCfg = Debug|Win32 + {80D51950-3950-490A-A413-C487099357E0}.Debug|Win32.Build.0 = Debug|Win32 + {80D51950-3950-490A-A413-C487099357E0}.Release|Win32.ActiveCfg = Release|Win32 + {80D51950-3950-490A-A413-C487099357E0}.Release|Win32.Build.0 = Release|Win32 + {5F0372B3-D304-413F-9F85-D7F521ADA1CE}.Debug|Win32.ActiveCfg = Debug|Win32 + {5F0372B3-D304-413F-9F85-D7F521ADA1CE}.Debug|Win32.Build.0 = Debug|Win32 + {5F0372B3-D304-413F-9F85-D7F521ADA1CE}.Release|Win32.ActiveCfg = Release|Win32 + {5F0372B3-D304-413F-9F85-D7F521ADA1CE}.Release|Win32.Build.0 = Release|Win32 + {4BE01550-900E-4EE7-80F1-E77727106545}.Debug|Win32.ActiveCfg = Debug|Win32 + {4BE01550-900E-4EE7-80F1-E77727106545}.Debug|Win32.Build.0 = Debug|Win32 + {4BE01550-900E-4EE7-80F1-E77727106545}.Release|Win32.ActiveCfg = Release|Win32 + {4BE01550-900E-4EE7-80F1-E77727106545}.Release|Win32.Build.0 = Release|Win32 + {ADBFAC2E-BB43-4BB4-886D-EAD55D75BED8}.Debug|Win32.ActiveCfg = Debug|Win32 + {ADBFAC2E-BB43-4BB4-886D-EAD55D75BED8}.Debug|Win32.Build.0 = Debug|Win32 + {ADBFAC2E-BB43-4BB4-886D-EAD55D75BED8}.Release|Win32.ActiveCfg = Release|Win32 + {ADBFAC2E-BB43-4BB4-886D-EAD55D75BED8}.Release|Win32.Build.0 = Release|Win32 + {A6DEC7F3-6890-4852-8B54-5D1B8380A98D}.Debug|Win32.ActiveCfg = Debug|Win32 + {A6DEC7F3-6890-4852-8B54-5D1B8380A98D}.Debug|Win32.Build.0 = Debug|Win32 + {A6DEC7F3-6890-4852-8B54-5D1B8380A98D}.Release|Win32.ActiveCfg = Release|Win32 + {A6DEC7F3-6890-4852-8B54-5D1B8380A98D}.Release|Win32.Build.0 = Release|Win32 + {01F30092-DE91-49EF-ADBD-6D8227E5965E}.Debug|Win32.ActiveCfg = Debug|Win32 + {01F30092-DE91-49EF-ADBD-6D8227E5965E}.Debug|Win32.Build.0 = Debug|Win32 + {01F30092-DE91-49EF-ADBD-6D8227E5965E}.Release|Win32.ActiveCfg = Release|Win32 + {01F30092-DE91-49EF-ADBD-6D8227E5965E}.Release|Win32.Build.0 = Release|Win32 + {E8E67426-A286-4250-A65F-7A9E4BB94B9B}.Debug|Win32.ActiveCfg = Debug|Win32 + {E8E67426-A286-4250-A65F-7A9E4BB94B9B}.Debug|Win32.Build.0 = Debug|Win32 + {E8E67426-A286-4250-A65F-7A9E4BB94B9B}.Release|Win32.ActiveCfg = Release|Win32 + {E8E67426-A286-4250-A65F-7A9E4BB94B9B}.Release|Win32.Build.0 = Release|Win32 + {466B48CD-83CF-4A10-A236-7578C1E9E5C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {466B48CD-83CF-4A10-A236-7578C1E9E5C1}.Debug|Win32.Build.0 = Debug|Win32 + {466B48CD-83CF-4A10-A236-7578C1E9E5C1}.Release|Win32.ActiveCfg = Release|Win32 + {466B48CD-83CF-4A10-A236-7578C1E9E5C1}.Release|Win32.Build.0 = Release|Win32 + {F1A2C267-0CA7-4DEC-961C-E04F0856652E}.Debug|Win32.ActiveCfg = Debug|Win32 + {F1A2C267-0CA7-4DEC-961C-E04F0856652E}.Debug|Win32.Build.0 = Debug|Win32 + {F1A2C267-0CA7-4DEC-961C-E04F0856652E}.Release|Win32.ActiveCfg = Release|Win32 + {F1A2C267-0CA7-4DEC-961C-E04F0856652E}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {2DF10409-F3FD-40CC-827C-F58CBDD447D2} = {262B74DC-AF8B-400B-8042-177E0FE07FC3} + {21186920-C26D-4DC7-A84E-15CFF728BEA9} = {262B74DC-AF8B-400B-8042-177E0FE07FC3} + {4BE01550-900E-4EE7-80F1-E77727106545} = {262B74DC-AF8B-400B-8042-177E0FE07FC3} + {ADBFAC2E-BB43-4BB4-886D-EAD55D75BED8} = {262B74DC-AF8B-400B-8042-177E0FE07FC3} + {A6DEC7F3-6890-4852-8B54-5D1B8380A98D} = {262B74DC-AF8B-400B-8042-177E0FE07FC3} + {F1A2C267-0CA7-4DEC-961C-E04F0856652E} = {262B74DC-AF8B-400B-8042-177E0FE07FC3} + {680773DE-337A-481B-BEDE-C4EDE38458AE} = {F66037C4-6C9A-4FBE-BDD4-46044ED1A2E2} + {80D51950-3950-490A-A413-C487099357E0} = {F66037C4-6C9A-4FBE-BDD4-46044ED1A2E2} + {5F0372B3-D304-413F-9F85-D7F521ADA1CE} = {F66037C4-6C9A-4FBE-BDD4-46044ED1A2E2} + {01F30092-DE91-49EF-ADBD-6D8227E5965E} = {F66037C4-6C9A-4FBE-BDD4-46044ED1A2E2} + {E8E67426-A286-4250-A65F-7A9E4BB94B9B} = {F66037C4-6C9A-4FBE-BDD4-46044ED1A2E2} + {466B48CD-83CF-4A10-A236-7578C1E9E5C1} = {F66037C4-6C9A-4FBE-BDD4-46044ED1A2E2} + EndGlobalSection +EndGlobal diff --git a/Chapter17/Chapter17.suo b/Chapter17/Chapter17.suo new file mode 100644 index 0000000000000000000000000000000000000000..80daaf85bb0452f50ca7633b5b352efac5d6d60b GIT binary patch literal 33280 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 literal 0 HcmV?d00001 diff --git a/Chapter17/TcpClient/TcpClient.cpp b/Chapter17/TcpClient/TcpClient.cpp new file mode 100644 index 0000000..a522910 --- /dev/null +++ b/Chapter17/TcpClient/TcpClient.cpp @@ -0,0 +1,47 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Threading; +using namespace System::Text; + +void main() +{ + Socket^ server = gcnew Socket(AddressFamily::InterNetwork, + SocketType::Stream, ProtocolType::Tcp); + try + { + IPEndPoint^ iped = + gcnew IPEndPoint(IPAddress::Parse("127.0.0.1"), 12345); + server->Connect(iped); + } + catch (SocketException^ se) + { + Console::WriteLine("Connection to server failed with error: {0}", + se->Message); + return; + } + + array^ msg = gcnew array(1024); + int rcv = server->Receive(msg); + + Console::WriteLine(Encoding::ASCII->GetString(msg, 0, rcv)); + + while (true) + { + Console::Write("Message ('q' to quit): "); + String^ input = Console::ReadLine(); + + if (input->ToLower()->Equals("q")) + break; + + msg = Encoding::ASCII->GetBytes(input); + server->Send(msg, msg->Length, SocketFlags::None); + + msg = gcnew array(1024); + rcv = server->Receive(msg); + Console::WriteLine(Encoding::ASCII->GetString(msg, 0, rcv)); + } + Console::WriteLine("Ended connection with server."); + server->Shutdown(SocketShutdown::Both); + server->Close(); +} diff --git a/Chapter17/TcpClient/TcpClient.vcproj b/Chapter17/TcpClient/TcpClient.vcproj new file mode 100644 index 0000000..40337d5 --- /dev/null +++ b/Chapter17/TcpClient/TcpClient.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/TcpClient/TcpClient.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/TcpClient/TcpClient.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/TcpClient/TcpClient.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/TcpClient_Stream/TcpClient_Stream.cpp b/Chapter17/TcpClient_Stream/TcpClient_Stream.cpp new file mode 100644 index 0000000..7d263bb --- /dev/null +++ b/Chapter17/TcpClient_Stream/TcpClient_Stream.cpp @@ -0,0 +1,54 @@ +using namespace System; +using namespace System::IO; +using namespace System::Net; +using namespace System::Net::Sockets; + +void main() +{ + TcpClient^ server; + StreamWriter^ writer; + StreamReader^ reader; + String^ msg; + + try + { + server = gcnew TcpClient("127.0.0.1", 12345); + + writer = gcnew StreamWriter(server->GetStream()); + reader = gcnew StreamReader(server->GetStream()); + } + catch (SocketException^ se) + { + Console::WriteLine("Connection to server failed with error: {0}", + se->Message); + return; + } + + msg = reader->ReadLine(); + + Console::WriteLine(msg); + + while (true) + { + Console::Write("Message ('q' to quit): "); + msg = Console::ReadLine(); + + if (msg->ToLower()->Equals("q")) + break; + + try + { + writer->WriteLine(msg); + writer->Flush(); + + msg = reader->ReadLine(); + Console::WriteLine(msg); + } + catch (IOException^) + { + break; // connection lost + } + } + Console::WriteLine("Ended connection with server."); + server->Close(); +} diff --git a/Chapter17/TcpClient_Stream/TcpClient_Stream.vcproj b/Chapter17/TcpClient_Stream/TcpClient_Stream.vcproj new file mode 100644 index 0000000..3b5243e --- /dev/null +++ b/Chapter17/TcpClient_Stream/TcpClient_Stream.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/TcpClient_Stream/TcpClient_Stream.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/TcpClient_Stream/TcpClient_Stream.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/TcpClient_Stream/TcpClient_Stream.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/TcpServer/TcpServer.cpp b/Chapter17/TcpServer/TcpServer.cpp new file mode 100644 index 0000000..717ba97 --- /dev/null +++ b/Chapter17/TcpServer/TcpServer.cpp @@ -0,0 +1,66 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Threading; +using namespace System::Text; + +ref class TcpServer +{ +public: + void ProcessThread(Object ^clientObj); +}; + +void TcpServer::ProcessThread(Object ^clientObj) +{ + Socket^ client = (Socket^)clientObj; + IPEndPoint^ clientEP = (IPEndPoint^)client->RemoteEndPoint; + + Console::WriteLine("Connected on IP: {0} Port: {1}", + clientEP->Address, clientEP->Port); + + array^ msg = Encoding::ASCII->GetBytes( + String::Format("Successfully connection to the server on port {0}", + clientEP->Port)); + client->Send(msg); + + int rcv; + while (true) + { + msg = gcnew array(1024); + + if ((rcv = client->Receive(msg)) == 0) + break; + + Console::WriteLine("Port[{0}] {1}", + clientEP->Port, Encoding::ASCII->GetString(msg, 0, rcv)); + + client->Send(msg, rcv, SocketFlags::None); + } + client->Close(); + Console::WriteLine("Connection to IP: {0} Port {1} closed.", + clientEP->Address, clientEP->Port); +} + +void main() +{ + TcpServer^ server = gcnew TcpServer(); + + Socket^ tcpListener = gcnew Socket(AddressFamily::InterNetwork, + SocketType::Stream, ProtocolType::Tcp); + + IPEndPoint^ iped = gcnew IPEndPoint(IPAddress::Any, 12345); + tcpListener->Bind(iped); + + tcpListener->Listen((int)SocketOptionName::MaxConnections); + + + while(true) + { + Console::WriteLine("Waiting for client connection."); + Socket^ client = tcpListener->Accept(); + + Thread ^thr = gcnew Thread( + gcnew ParameterizedThreadStart(server, &TcpServer::ProcessThread)); + thr->Start(client); + } +} diff --git a/Chapter17/TcpServer/TcpServer.vcproj b/Chapter17/TcpServer/TcpServer.vcproj new file mode 100644 index 0000000..2ebaaf5 --- /dev/null +++ b/Chapter17/TcpServer/TcpServer.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/TcpServer/TcpServer.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/TcpServer/TcpServer.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/TcpServer/TcpServer.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/TcpServer_Listener/TcpServer_Listener.cpp b/Chapter17/TcpServer_Listener/TcpServer_Listener.cpp new file mode 100644 index 0000000..4eceb64 --- /dev/null +++ b/Chapter17/TcpServer_Listener/TcpServer_Listener.cpp @@ -0,0 +1,60 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Threading; +using namespace System::Text; + +ref class TcpServer +{ +public: + void ProcessThread(Object ^clientObj); +}; + +void TcpServer::ProcessThread(Object ^clientObj) +{ + Socket^ client = (Socket^)clientObj; + IPEndPoint^ clientEP = (IPEndPoint^)client->RemoteEndPoint; + + Console::WriteLine("Connected on IP: {0} Port: {1}", + clientEP->Address, clientEP->Port); + + array^ msg = Encoding::ASCII->GetBytes( + String::Format("Successfully connection to the server on port {0}", + clientEP->Port)); + client->Send(msg); + + int rcv; + while (true) + { + msg = gcnew array(1024); + + if ((rcv = client->Receive(msg)) == 0) + break; + + Console::WriteLine("Port[{0}] {1}", + clientEP->Port, Encoding::ASCII->GetString(msg, 0, rcv)); + + client->Send(msg, rcv, SocketFlags::None); + } + client->Close(); + Console::WriteLine("Connection to IP: {0} Port {1} closed.", + clientEP->Address, clientEP->Port); +} + +void main() +{ + TcpServer^ server = gcnew TcpServer(); + + TcpListener^ socket = gcnew TcpListener(IPAddress::Any, 12345); + socket->Start(); + + while(true) + { + Console::WriteLine("Waiting for client connection."); + Socket^ client = socket->AcceptSocket(); + + Thread ^thr = gcnew Thread( + gcnew ParameterizedThreadStart(server, &TcpServer::ProcessThread)); + thr->Start(client); + } +} diff --git a/Chapter17/TcpServer_Listener/TcpServer_Listener.vcproj b/Chapter17/TcpServer_Listener/TcpServer_Listener.vcproj new file mode 100644 index 0000000..f5001e3 --- /dev/null +++ b/Chapter17/TcpServer_Listener/TcpServer_Listener.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/TcpServer_Listener/TcpServer_Listener.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/TcpServer_Listener/TcpServer_Listener.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/TcpServer_Listener/TcpServer_Listener.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/TcpServer_Stream/TcpServer_Stream.cpp b/Chapter17/TcpServer_Stream/TcpServer_Stream.cpp new file mode 100644 index 0000000..607a794 --- /dev/null +++ b/Chapter17/TcpServer_Stream/TcpServer_Stream.cpp @@ -0,0 +1,67 @@ +using namespace System; +using namespace System::IO; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Threading; + +ref class TcpServer +{ +public: + void ProcessThread(Object ^clientObj); +}; + +void TcpServer::ProcessThread(Object ^clientObj) +{ + TcpClient^ client = (TcpClient^)clientObj; + + IPEndPoint^ clientEP = (IPEndPoint^)client->Client->RemoteEndPoint; + + Console::WriteLine("Connected on IP: {0} Port: {1}", + clientEP->Address, clientEP->Port); + + StreamWriter^ writer = gcnew StreamWriter(client->GetStream()); + StreamReader^ reader = gcnew StreamReader(client->GetStream()); + + writer->WriteLine("Successfully connection to the server on port {0}", + clientEP->Port); + writer->Flush(); + + String^ msg; + while (true) + { + try + { + msg = reader->ReadLine(); + Console::WriteLine("Port[{0}] {1}", clientEP->Port, msg); + + writer->WriteLine(msg); + writer->Flush(); + } + catch (IOException^) + { + break; // connection lost + } + } + client->Close(); + + Console::WriteLine("Connection to IP: {0} Port {1} closed.", + clientEP->Address, clientEP->Port); +} + +void main() +{ + TcpServer^ server = gcnew TcpServer(); + + TcpListener^ socket = gcnew TcpListener(IPAddress::Any, 12345); + socket->Start(); + + while(true) + { + Console::WriteLine("Waiting for client connection."); + TcpClient^ client = socket->AcceptTcpClient(); + + Thread ^thr = gcnew Thread( + gcnew ParameterizedThreadStart(server, &TcpServer::ProcessThread)); + thr->Start(client); + } +} diff --git a/Chapter17/TcpServer_Stream/TcpServer_Stream.vcproj b/Chapter17/TcpServer_Stream/TcpServer_Stream.vcproj new file mode 100644 index 0000000..82e1fdf --- /dev/null +++ b/Chapter17/TcpServer_Stream/TcpServer_Stream.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/TcpServer_Stream/TcpServer_Stream.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/TcpServer_Stream/TcpServer_Stream.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/TcpServer_Stream/TcpServer_Stream.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/UDPConnect/UDPConnect.cpp b/Chapter17/UDPConnect/UDPConnect.cpp new file mode 100644 index 0000000..6857116 --- /dev/null +++ b/Chapter17/UDPConnect/UDPConnect.cpp @@ -0,0 +1,30 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Text; + +void main() +{ + Socket^ socket = gcnew Socket(AddressFamily::InterNetwork, SocketType::Dgram, ProtocolType::Udp); + + EndPoint^ Remote = gcnew IPEndPoint(IPAddress::Parse("127.0.0.1"), 54321); + socket->Connect(Remote); + + while (true) + { + Console::Write("Message ('q' to quit): "); + String^ input = Console::ReadLine(); + + if (input->ToLower()->Equals("q")) + break; + + array^ message = Encoding::ASCII->GetBytes(input); + socket->Send(message); + + message = gcnew array(1024); + int recv = socket->Receive(message); + + Console::WriteLine("[{0}] {1}", + Remote->ToString(), Encoding::ASCII->GetString(message, 0, recv)); + } +} diff --git a/Chapter17/UDPConnect/UDPConnect.vcproj b/Chapter17/UDPConnect/UDPConnect.vcproj new file mode 100644 index 0000000..fb19d27 --- /dev/null +++ b/Chapter17/UDPConnect/UDPConnect.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/UDPConnect/UDPConnect.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/UDPConnect/UDPConnect.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/UDPConnect/UDPConnect.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/UdpClient/UdpClient.cpp b/Chapter17/UdpClient/UdpClient.cpp new file mode 100644 index 0000000..3adb8dc --- /dev/null +++ b/Chapter17/UdpClient/UdpClient.cpp @@ -0,0 +1,31 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Text; + +void main() +{ + Socket^ socket = gcnew Socket(AddressFamily::InterNetwork, SocketType::Dgram, ProtocolType::Udp); + + //IPEndPoint^ ipep = gcnew IPEndPoint(IPAddress::Any, 54322); + //socket->Bind(ipep); + + EndPoint^ Remote = gcnew IPEndPoint(IPAddress::Parse("127.0.0.1"), 54321); + + while (true) + { + Console::Write("Message ('q' to quit): "); + String^ input = Console::ReadLine(); + + if (input->ToLower()->Equals("q")) + break; + + array^ message = Encoding::ASCII->GetBytes(input); + socket->SendTo(message, Remote); + + message = gcnew array(1024); + int recv = socket->ReceiveFrom(message, Remote); + Console::WriteLine("[{0}] {1}", + Remote->ToString(), Encoding::ASCII->GetString(message, 0, recv)); + } +} diff --git a/Chapter17/UdpClient/UdpClient.vcproj b/Chapter17/UdpClient/UdpClient.vcproj new file mode 100644 index 0000000..6d5bc02 --- /dev/null +++ b/Chapter17/UdpClient/UdpClient.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/UdpClient/UdpClient.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/UdpClient/UdpClient.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/UdpClient/UdpClient.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/UdpClient_Helper/UdpClient_Helper.cpp b/Chapter17/UdpClient_Helper/UdpClient_Helper.cpp new file mode 100644 index 0000000..1020523 --- /dev/null +++ b/Chapter17/UdpClient_Helper/UdpClient_Helper.cpp @@ -0,0 +1,29 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Text; + +void main() +{ + UdpClient^ client = gcnew UdpClient(); + + IPEndPoint^ Remote = + gcnew IPEndPoint(IPAddress::Parse("127.0.0.1"), 54321); + + while (true) + { + Console::Write("Message ('q' to quit): "); + String^ input = Console::ReadLine(); + + if (input->ToLower()->Equals("q")) + break; + + array^ message = Encoding::ASCII->GetBytes(input); + client->Send(message, message->Length, Remote); + + message = client->Receive(Remote); + Console::WriteLine("[{0}] {1}", + Remote->ToString(), + Encoding::ASCII->GetString(message, 0, message->Length)); + } +} diff --git a/Chapter17/UdpClient_Helper/UdpClient_Helper.vcproj b/Chapter17/UdpClient_Helper/UdpClient_Helper.vcproj new file mode 100644 index 0000000..2735ee8 --- /dev/null +++ b/Chapter17/UdpClient_Helper/UdpClient_Helper.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/UdpClient_Helper/UdpClient_Helper.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/UdpClient_Helper/UdpClient_Helper.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/UdpClient_Helper/UdpClient_Helper.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/UdpClient_Timeout/UdpClient_Timeout.cpp b/Chapter17/UdpClient_Timeout/UdpClient_Timeout.cpp new file mode 100644 index 0000000..0d1a86b --- /dev/null +++ b/Chapter17/UdpClient_Timeout/UdpClient_Timeout.cpp @@ -0,0 +1,43 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Text; + +void main() +{ + Socket^ socket = gcnew Socket(AddressFamily::InterNetwork, SocketType::Dgram, ProtocolType::Udp); + + EndPoint^ Remote = gcnew IPEndPoint(IPAddress::Parse("127.0.0.1"), 54321); + + if ((int)socket->GetSocketOption(SocketOptionLevel::Socket, + SocketOptionName::ReceiveTimeout) < 5000) + { + socket->SetSocketOption(SocketOptionLevel::Socket, + SocketOptionName::ReceiveTimeout, 5000 ); + } + + while (true) + { + Console::Write("Message ('q' to quit): "); + String^ input = Console::ReadLine(); + + if (input->ToLower()->Equals("q")) + break; + + array^ message = Encoding::ASCII->GetBytes(input); + socket->SendTo(message, Remote); + + message = gcnew array(1024); + try + { + int recv = socket->ReceiveFrom(message, Remote); + Console::WriteLine("[{0}] {1}", + Remote->ToString(), Encoding::ASCII->GetString(message, 0, recv)); + } + catch (SocketException^) + { + Console::WriteLine("Receive failed with a time out."); + Console::WriteLine("Make sure server is running."); + } + } +} diff --git a/Chapter17/UdpClient_Timeout/UdpClient_Timeout.vcproj b/Chapter17/UdpClient_Timeout/UdpClient_Timeout.vcproj new file mode 100644 index 0000000..b9e11d0 --- /dev/null +++ b/Chapter17/UdpClient_Timeout/UdpClient_Timeout.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/UdpClient_Timeout/UdpClient_Timeout.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/UdpClient_Timeout/UdpClient_Timeout.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/UdpClient_Timeout/UdpClient_Timeout.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/UdpServer/UdpServer.cpp b/Chapter17/UdpServer/UdpServer.cpp new file mode 100644 index 0000000..a153800 --- /dev/null +++ b/Chapter17/UdpServer/UdpServer.cpp @@ -0,0 +1,27 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Text; + +void main() +{ + Socket^ socket = gcnew Socket(AddressFamily::InterNetwork, SocketType::Dgram, ProtocolType::Udp); + IPEndPoint^ ipep = gcnew IPEndPoint(IPAddress::Any, 54321); + + socket->Bind(ipep); + + Console::WriteLine("Waiting for client connection."); + + while(true) + { + array^ message = gcnew array(1024); + EndPoint^ Remote = (EndPoint^) gcnew IPEndPoint(IPAddress::Any, 0); + + int recv = socket->ReceiveFrom(message, Remote); + + Console::WriteLine("[{0}] {1}", + Remote->ToString(), Encoding::ASCII->GetString(message, 0, recv)); + + socket->SendTo(message, recv, SocketFlags::None, Remote); + } +} diff --git a/Chapter17/UdpServer/UdpServer.vcproj b/Chapter17/UdpServer/UdpServer.vcproj new file mode 100644 index 0000000..6900dc9 --- /dev/null +++ b/Chapter17/UdpServer/UdpServer.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/UdpServer/UdpServer.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/UdpServer/UdpServer.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/UdpServer/UdpServer.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter17/UdpServer_Helper/UdpServer_Helper.cpp b/Chapter17/UdpServer_Helper/UdpServer_Helper.cpp new file mode 100644 index 0000000..655993d --- /dev/null +++ b/Chapter17/UdpServer_Helper/UdpServer_Helper.cpp @@ -0,0 +1,27 @@ +using namespace System; +using namespace System::Net; +using namespace System::Net::Sockets; +using namespace System::Text; + +void main() +{ + IPEndPoint^ ipep = gcnew IPEndPoint(IPAddress::Any, 54321); + UdpClient^ server = gcnew UdpClient(ipep); + + Console::WriteLine("Waiting for client connection."); + + array^ message; + + while(true) + { + IPEndPoint^ Remote = gcnew IPEndPoint(IPAddress::Any, 0); + + message = server->Receive(Remote); + + Console::WriteLine("[{0}] [{1}]", + Remote->ToString(), Encoding::ASCII->GetString(message, 0, + message->Length)); + + server->Send(message, message->Length, Remote); + } +} diff --git a/Chapter17/UdpServer_Helper/UdpServer_Helper.vcproj b/Chapter17/UdpServer_Helper/UdpServer_Helper.vcproj new file mode 100644 index 0000000..aef110c --- /dev/null +++ b/Chapter17/UdpServer_Helper/UdpServer_Helper.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter17/UdpServer_Helper/UdpServer_Helper.vcproj.AMIDALA.Stephen Fraser.user b/Chapter17/UdpServer_Helper/UdpServer_Helper.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter17/UdpServer_Helper/UdpServer_Helper.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/Chapter18.sln b/Chapter18/Chapter18.sln new file mode 100644 index 0000000..27a119e --- /dev/null +++ b/Chapter18/Chapter18.sln @@ -0,0 +1,80 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Reflecting", "Reflecting\Reflecting.vcproj", "{D57C7994-C5CA-4C31-BF87-63EFE42A7AD2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Invoking", "Invoking\Invoking.vcproj", "{F16AA69E-6497-4512-A248-64BA097A3253}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Documentation", "Documentation\Documentation.vcproj", "{488B8693-1B6C-4804-B07A-02DEAC4CC4D0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DocumentationWriter", "DocumentationWriter\DocumentationWriter.vcproj", "{536903C6-2D97-4849-BB44-08ADD3623504}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DocTestLib", "DocTestLib\DocTestLib.vcproj", "{3D5C227D-FAA6-48F9-88D1-40B325FF95F4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReferenceSharedAssembly", "ReferenceSharedAssembly\ReferenceSharedAssembly.vcproj", "{963F7AE5-DE33-4FFB-B0BE-5702B6240D9C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SharedAssembly", "SharedAssembly\SharedAssembly.vcproj", "{8B79896F-DC22-4EA5-B482-244AA45AE13E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EmbeddingResources", "EmbeddingResources\EmbeddingResources.vcproj", "{A8E0EDAF-FB78-45A8-B932-54DDC1ECF5C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MultiCultureDate", "MultiCultureDate\MultiCultureDate.vcproj", "{9CB4E403-6500-4704-AB0A-9E1637CDFB87}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MultiCultureApp", "MultiCultureApp\MultiCultureApp.vcproj", "{0C2FECB4-DF56-4184-BCCC-7533F216F31D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MultiCultureConsole", "MultiCultureConsole\MultiCultureConsole.vcproj", "{CDEE9252-3489-4FA9-B4EC-A03F189600F6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D57C7994-C5CA-4C31-BF87-63EFE42A7AD2}.Debug|Win32.ActiveCfg = Debug|Win32 + {D57C7994-C5CA-4C31-BF87-63EFE42A7AD2}.Debug|Win32.Build.0 = Debug|Win32 + {D57C7994-C5CA-4C31-BF87-63EFE42A7AD2}.Release|Win32.ActiveCfg = Release|Win32 + {D57C7994-C5CA-4C31-BF87-63EFE42A7AD2}.Release|Win32.Build.0 = Release|Win32 + {F16AA69E-6497-4512-A248-64BA097A3253}.Debug|Win32.ActiveCfg = Debug|Win32 + {F16AA69E-6497-4512-A248-64BA097A3253}.Debug|Win32.Build.0 = Debug|Win32 + {F16AA69E-6497-4512-A248-64BA097A3253}.Release|Win32.ActiveCfg = Release|Win32 + {F16AA69E-6497-4512-A248-64BA097A3253}.Release|Win32.Build.0 = Release|Win32 + {488B8693-1B6C-4804-B07A-02DEAC4CC4D0}.Debug|Win32.ActiveCfg = Debug|Win32 + {488B8693-1B6C-4804-B07A-02DEAC4CC4D0}.Debug|Win32.Build.0 = Debug|Win32 + {488B8693-1B6C-4804-B07A-02DEAC4CC4D0}.Release|Win32.ActiveCfg = Release|Win32 + {488B8693-1B6C-4804-B07A-02DEAC4CC4D0}.Release|Win32.Build.0 = Release|Win32 + {536903C6-2D97-4849-BB44-08ADD3623504}.Debug|Win32.ActiveCfg = Debug|Win32 + {536903C6-2D97-4849-BB44-08ADD3623504}.Debug|Win32.Build.0 = Debug|Win32 + {536903C6-2D97-4849-BB44-08ADD3623504}.Release|Win32.ActiveCfg = Release|Win32 + {536903C6-2D97-4849-BB44-08ADD3623504}.Release|Win32.Build.0 = Release|Win32 + {3D5C227D-FAA6-48F9-88D1-40B325FF95F4}.Debug|Win32.ActiveCfg = Debug|Win32 + {3D5C227D-FAA6-48F9-88D1-40B325FF95F4}.Debug|Win32.Build.0 = Debug|Win32 + {3D5C227D-FAA6-48F9-88D1-40B325FF95F4}.Release|Win32.ActiveCfg = Release|Win32 + {3D5C227D-FAA6-48F9-88D1-40B325FF95F4}.Release|Win32.Build.0 = Release|Win32 + {963F7AE5-DE33-4FFB-B0BE-5702B6240D9C}.Debug|Win32.ActiveCfg = Debug|Win32 + {963F7AE5-DE33-4FFB-B0BE-5702B6240D9C}.Debug|Win32.Build.0 = Debug|Win32 + {963F7AE5-DE33-4FFB-B0BE-5702B6240D9C}.Release|Win32.ActiveCfg = Release|Win32 + {963F7AE5-DE33-4FFB-B0BE-5702B6240D9C}.Release|Win32.Build.0 = Release|Win32 + {8B79896F-DC22-4EA5-B482-244AA45AE13E}.Debug|Win32.ActiveCfg = Debug|Win32 + {8B79896F-DC22-4EA5-B482-244AA45AE13E}.Debug|Win32.Build.0 = Debug|Win32 + {8B79896F-DC22-4EA5-B482-244AA45AE13E}.Release|Win32.ActiveCfg = Release|Win32 + {8B79896F-DC22-4EA5-B482-244AA45AE13E}.Release|Win32.Build.0 = Release|Win32 + {A8E0EDAF-FB78-45A8-B932-54DDC1ECF5C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {A8E0EDAF-FB78-45A8-B932-54DDC1ECF5C1}.Debug|Win32.Build.0 = Debug|Win32 + {A8E0EDAF-FB78-45A8-B932-54DDC1ECF5C1}.Release|Win32.ActiveCfg = Release|Win32 + {A8E0EDAF-FB78-45A8-B932-54DDC1ECF5C1}.Release|Win32.Build.0 = Release|Win32 + {9CB4E403-6500-4704-AB0A-9E1637CDFB87}.Debug|Win32.ActiveCfg = Debug|Win32 + {9CB4E403-6500-4704-AB0A-9E1637CDFB87}.Debug|Win32.Build.0 = Debug|Win32 + {9CB4E403-6500-4704-AB0A-9E1637CDFB87}.Release|Win32.ActiveCfg = Release|Win32 + {9CB4E403-6500-4704-AB0A-9E1637CDFB87}.Release|Win32.Build.0 = Release|Win32 + {0C2FECB4-DF56-4184-BCCC-7533F216F31D}.Debug|Win32.ActiveCfg = Debug|Win32 + {0C2FECB4-DF56-4184-BCCC-7533F216F31D}.Debug|Win32.Build.0 = Debug|Win32 + {0C2FECB4-DF56-4184-BCCC-7533F216F31D}.Release|Win32.ActiveCfg = Release|Win32 + {0C2FECB4-DF56-4184-BCCC-7533F216F31D}.Release|Win32.Build.0 = Release|Win32 + {CDEE9252-3489-4FA9-B4EC-A03F189600F6}.Debug|Win32.ActiveCfg = Debug|Win32 + {CDEE9252-3489-4FA9-B4EC-A03F189600F6}.Debug|Win32.Build.0 = Debug|Win32 + {CDEE9252-3489-4FA9-B4EC-A03F189600F6}.Release|Win32.ActiveCfg = Release|Win32 + {CDEE9252-3489-4FA9-B4EC-A03F189600F6}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter18/Chapter18.suo b/Chapter18/Chapter18.suo new file mode 100644 index 0000000000000000000000000000000000000000..a38e961362df33364de4e5dab0bf6bf5d2f6aaae GIT binary patch literal 24064 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/DocTestLib/DocTestLib.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/DocTestLib/DocTestLib.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..b1fac18 --- /dev/null +++ b/Chapter18/DocTestLib/DocTestLib.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/Documentation/AssemblyInfo.cpp b/Chapter18/Documentation/AssemblyInfo.cpp new file mode 100644 index 0000000..bd00466 --- /dev/null +++ b/Chapter18/Documentation/AssemblyInfo.cpp @@ -0,0 +1,59 @@ +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("Documentation")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("Documentation")]; +[assembly:AssemblyCopyrightAttribute("Copyright @ 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter18/Documentation/Documentation.cpp b/Chapter18/Documentation/Documentation.cpp new file mode 100644 index 0000000..cc6f061 --- /dev/null +++ b/Chapter18/Documentation/Documentation.cpp @@ -0,0 +1,57 @@ +#include "Documentation.h" + +namespace Documentation +{ + // ------------- DescriptionAttribute ------------------- + + DescriptionAttribute::DescriptionAttribute(String ^Author, String ^Description) + { + mAuthor = Author; + mDescription = Description; + mCompileDate = DateTime::Now; + } + + String^ DescriptionAttribute::Author::get() + { + return mAuthor; + } + + String^ DescriptionAttribute::Description::get() + { + return mDescription; + } + + String^ DescriptionAttribute::CompileDate::get() + { + return mCompileDate.ToShortDateString(); + } + + // ------------- HistoryAttribute ------------------- + + HistoryAttribute::HistoryAttribute(String ^Author, String ^Description) + { + mAuthor = Author; + mDescription = Description; + mModifyDate = DateTime::Now; + } + + String^ HistoryAttribute::Author::get() + { + return mAuthor; + } + + String^ HistoryAttribute::Description::get() + { + return mDescription; + } + + String^ HistoryAttribute::ModifyDate::get() + { + return mModifyDate.ToShortDateString(); + } + + void HistoryAttribute::ModifyDate::set(String ^value) + { + mModifyDate = Convert::ToDateTime(value); + } +} \ No newline at end of file diff --git a/Chapter18/Documentation/Documentation.h b/Chapter18/Documentation/Documentation.h new file mode 100644 index 0000000..a1bbab9 --- /dev/null +++ b/Chapter18/Documentation/Documentation.h @@ -0,0 +1,42 @@ +#pragma once + +using namespace System; +using namespace System::Text; +using namespace System::Reflection; + +namespace Documentation +{ + [AttributeUsage(AttributeTargets::All, Inherited=true, AllowMultiple=false)] + public ref class DescriptionAttribute : public Attribute + { + String ^mAuthor; + DateTime mCompileDate; + String ^mDescription; + + public: + DescriptionAttribute(String ^Author, String ^Description); + + property String^ Author { String^ get(); } + property String^ Description { String^ get(); } + property String^ CompileDate { String^ get(); } + }; + + [AttributeUsage(AttributeTargets::All, Inherited=true, AllowMultiple=true)] + public ref class HistoryAttribute : public Attribute + { + String ^mAuthor; + DateTime mModifyDate; + String ^mDescription; + + public: + HistoryAttribute(String ^Author, String ^Description); + + property String^ Author { String^ get(); } + property String^ Description { String^ get(); } + property String^ ModifyDate + { + String^ get(); + void set(String^ value); + } + }; +} diff --git a/Chapter18/Documentation/Documentation.vcproj b/Chapter18/Documentation/Documentation.vcproj new file mode 100644 index 0000000..c580c92 --- /dev/null +++ b/Chapter18/Documentation/Documentation.vcproj @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/Documentation/Documentation.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/Documentation/Documentation.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..b1fac18 --- /dev/null +++ b/Chapter18/Documentation/Documentation.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/DocumentationWriter/AssemblyInfo.cpp b/Chapter18/DocumentationWriter/AssemblyInfo.cpp new file mode 100644 index 0000000..22eab83 --- /dev/null +++ b/Chapter18/DocumentationWriter/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("DocumentationWriter")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("DocumentationWriter")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter18/DocumentationWriter/DocumentationWriter.cpp b/Chapter18/DocumentationWriter/DocumentationWriter.cpp new file mode 100644 index 0000000..f8cebb5 --- /dev/null +++ b/Chapter18/DocumentationWriter/DocumentationWriter.cpp @@ -0,0 +1,91 @@ +// DocumentationWriter.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace Reflection; +using namespace Documentation; + +void DisplayDescription(Attribute ^attr) +{ + if (attr != nullptr) + { + DescriptionAttribute ^cd = (DescriptionAttribute^)attr; + Console::WriteLine(" Author: {0} -- Compiled: {1}", + cd->Author, cd->CompileDate); + Console::WriteLine(" Description: {0}", cd->Description); + Console::WriteLine(" ---- Change History ----"); + } + else + Console::WriteLine(" No Documentation"); +} + +void DisplayHistory(array^ attr) +{ + if (attr->Length > 0) + { + for each (HistoryAttribute^ cd in attr) + { + Console::WriteLine(" Author: {0} -- Modified: {1}", + cd->Author, cd->ModifyDate); + Console::WriteLine(" Description: {0}", cd->Description); + } + } + else + Console::WriteLine(" No changes"); +} + +void DisplayAttributes(MemberInfo ^info) +{ + DisplayDescription(Attribute::GetCustomAttribute(info, DescriptionAttribute::typeid)); + DisplayHistory(info->GetCustomAttributes(HistoryAttribute::typeid, true)); +} + +void PrintClassInfo(Type ^type) +{ + Console::WriteLine("Class: {0}", type->ToString()); + DisplayAttributes(type); + + array^ constructors = type->GetConstructors(); + for (int i = 0; i < constructors->Length; i++) + { + Console::WriteLine("Constructor: {0}", constructors[i]->ToString()); + DisplayAttributes(constructors[i]); + } + + array ^ methods = type->GetMethods((BindingFlags) + (BindingFlags::Public|BindingFlags::Instance|BindingFlags::DeclaredOnly)); + for (int i = 0; i < methods->Length; i++) + { + Console::WriteLine("Method: {0}", methods[i]->ToString()); + DisplayAttributes(methods[i]); + } + + array^ properties = type->GetProperties((BindingFlags) + (BindingFlags::Public|BindingFlags::Instance|BindingFlags::DeclaredOnly)); + for (int i = 0; i < properties->Length; i++) + { + Console::WriteLine("Property: {0}", properties[i]->ToString()); + DisplayAttributes(properties[i]); + } +} + +int main(array ^args) +{ + try + { + Assembly ^assembly = Assembly::LoadFrom(args[0]); + + array^ types = assembly->GetTypes(); + + for (int i = 0; i < types->Length; i++) + { + PrintClassInfo(types[i]); + Console::WriteLine(); + } + } + catch(System::IO::FileNotFoundException^) + { + Console::WriteLine("Can't find assembly: {0}\n", args[0]); + } +} diff --git a/Chapter18/DocumentationWriter/DocumentationWriter.vcproj b/Chapter18/DocumentationWriter/DocumentationWriter.vcproj new file mode 100644 index 0000000..5876765 --- /dev/null +++ b/Chapter18/DocumentationWriter/DocumentationWriter.vcproj @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/DocumentationWriter/DocumentationWriter.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/DocumentationWriter/DocumentationWriter.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter18/DocumentationWriter/DocumentationWriter.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/DocumentationWriter/stdafx.cpp b/Chapter18/DocumentationWriter/stdafx.cpp new file mode 100644 index 0000000..f2424a2 --- /dev/null +++ b/Chapter18/DocumentationWriter/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// DocumentationWriter.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter18/DocumentationWriter/stdafx.h b/Chapter18/DocumentationWriter/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter18/DocumentationWriter/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter18/EmbeddingResources/Animal.resx b/Chapter18/EmbeddingResources/Animal.resx new file mode 100644 index 0000000..b01d864 --- /dev/null +++ b/Chapter18/EmbeddingResources/Animal.resx @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dog + + + Cat + + + Horse + + + Cow + + \ No newline at end of file diff --git a/Chapter18/EmbeddingResources/AssemblyInfo.cpp b/Chapter18/EmbeddingResources/AssemblyInfo.cpp new file mode 100644 index 0000000..aba4c6c --- /dev/null +++ b/Chapter18/EmbeddingResources/AssemblyInfo.cpp @@ -0,0 +1,59 @@ +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("EmbeddingResources")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("EmbeddingResources")]; +[assembly:AssemblyCopyrightAttribute("Copyright @ 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter18/EmbeddingResources/Color.txt b/Chapter18/EmbeddingResources/Color.txt new file mode 100644 index 0000000..bd2488f --- /dev/null +++ b/Chapter18/EmbeddingResources/Color.txt @@ -0,0 +1,4 @@ +Color1 = Blue +Color2 = Red +Color3 = Yellow +Color4 = Green \ No newline at end of file diff --git a/Chapter18/EmbeddingResources/EmbeddingResources.cpp b/Chapter18/EmbeddingResources/EmbeddingResources.cpp new file mode 100644 index 0000000..5bf2532 --- /dev/null +++ b/Chapter18/EmbeddingResources/EmbeddingResources.cpp @@ -0,0 +1,33 @@ +using namespace System; +using namespace System::Collections; +using namespace System::Reflection; +using namespace System::Resources; + +void main() +{ + Console::WriteLine("*** ResourceReader ***"); + ResourceReader ^rreader = gcnew ResourceReader("Fruit.resources"); + IDictionaryEnumerator ^denum = rreader->GetEnumerator(); + while (denum->MoveNext()) + { + Console::WriteLine("{0} = {1}", denum->Key, denum->Value); + } + rreader->Close(); + + ResourceManager ^rmgr; + + Console::WriteLine("\n*** ResourceManager From File ***"); + rmgr = ResourceManager::CreateFileBasedResourceManager("Fruit", "", nullptr); + Console::WriteLine(rmgr->GetString("Fruit1")); + Console::WriteLine(rmgr->GetString("Fruit2")); + Console::WriteLine(rmgr->GetString("Fruit3")); + Console::WriteLine(rmgr->GetString("Fruit4")); + + Console::WriteLine("\n*** ResourceManager From Assembly ***"); + Assembly ^assembly = Assembly::GetExecutingAssembly(); + rmgr = gcnew ResourceManager("Fruit", assembly); + Console::WriteLine(rmgr->GetObject("Fruit1")); + Console::WriteLine(rmgr->GetObject("Fruit2")); + Console::WriteLine(rmgr->GetObject("Fruit3")); + Console::WriteLine(rmgr->GetObject("Fruit4")); +} diff --git a/Chapter18/EmbeddingResources/EmbeddingResources.vcproj b/Chapter18/EmbeddingResources/EmbeddingResources.vcproj new file mode 100644 index 0000000..4ad1d0f --- /dev/null +++ b/Chapter18/EmbeddingResources/EmbeddingResources.vcproj @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/EmbeddingResources/EmbeddingResources.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/EmbeddingResources/EmbeddingResources.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter18/EmbeddingResources/EmbeddingResources.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/EmbeddingResources/fruit.resources b/Chapter18/EmbeddingResources/fruit.resources new file mode 100644 index 0000000000000000000000000000000000000000..d64d2664465a31828253458299e5fd9ce292663a GIT binary patch literal 309 zcmX?i>is@O1_p*HK%5_3SzMBus~417oL^d$oLUTL1*ImYq!#HY8XsY?nQ|OK*}dIH$M*mml{sb literal 0 HcmV?d00001 diff --git a/Chapter18/EmbeddingResources/fruit.txt b/Chapter18/EmbeddingResources/fruit.txt new file mode 100644 index 0000000..ec9acf3 --- /dev/null +++ b/Chapter18/EmbeddingResources/fruit.txt @@ -0,0 +1,4 @@ +Fruit1 = Apple +Fruit2 = Orange +Fruit3 = Grape +Fruit4 = Lemon diff --git a/Chapter18/Invoking/AssemblyInfo.cpp b/Chapter18/Invoking/AssemblyInfo.cpp new file mode 100644 index 0000000..b2dc606 --- /dev/null +++ b/Chapter18/Invoking/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("Invoking")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("Invoking")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter18/Invoking/Form1.h b/Chapter18/Invoking/Form1.h new file mode 100644 index 0000000..a8a9c69 --- /dev/null +++ b/Chapter18/Invoking/Form1.h @@ -0,0 +1,163 @@ +#pragma once + + +namespace Invoking { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + using namespace System::Reflection; + + /// + /// Summary for Form1 + /// + /// WARNING: If you change the name of this class, you will need to change the + /// 'Resource File Name' property for the managed resource compiler tool + /// associated with all .resx files this class depends on. Otherwise, + /// the designers will not be able to interact properly with localized + /// resources associated with this form. + /// + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + // + //TODO: Add the constructor code here + // + } + + protected: + /// + /// Clean up any resources being used. + /// + ~Form1() + { + if (components) + { + delete components; + } + } + private: System::Windows::Forms::Label^ lbColor; + protected: + private: System::Windows::Forms::ComboBox^ cbColor; + + private: array ^ colors; + + private: + /// + /// Required designer variable. + /// + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + void InitializeComponent(void) + { + this->lbColor = (gcnew System::Windows::Forms::Label()); + this->cbColor = (gcnew System::Windows::Forms::ComboBox()); + this->SuspendLayout(); + // + // lbColor + // + this->lbColor->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle; + this->lbColor->Location = System::Drawing::Point(14, 42); + this->lbColor->Name = L"lbColor"; + this->lbColor->Size = System::Drawing::Size(264, 62); + this->lbColor->TabIndex = 3; + this->lbColor->Text = L"None"; + this->lbColor->TextAlign = System::Drawing::ContentAlignment::MiddleCenter; + // + // cbColor + // + this->cbColor->FormattingEnabled = true; + this->cbColor->Location = System::Drawing::Point(14, 14); + this->cbColor->Name = L"cbColor"; + this->cbColor->Size = System::Drawing::Size(264, 21); + this->cbColor->TabIndex = 2; + this->cbColor->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::cbColor_SelectedIndexChanged); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 118); + this->Controls->Add(this->lbColor); + this->Controls->Add(this->cbColor); + this->Name = L"Form1"; + this->Text = L"System Drawing Colors"; + this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); + this->ResumeLayout(false); + + } +#pragma endregion + private: + System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) + { + Type^ colorType = Color::typeid; + colors = colorType->GetProperties(); + + for (int i = 0; i < colors->Length; i++) + { + if (colors[i]->ToString()->IndexOf("System.Drawing.Color") >= 0) + cbColor->Items->Add(colors[i]->ToString()); + } + cbColor->SelectedIndex = 0; + } + + System::Void cbColor_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) + { + static bool alternateWrite = true; + PropertyInfo ^ColorProp = colors[cbColor->SelectedIndex]; + + MethodInfo ^PropMethod = ColorProp->GetGetMethod(); + + lbColor->BackColor = (Color)PropMethod->Invoke(nullptr,nullptr); + + Assembly ^assembly = Assembly::Load("Invoking"); + + Type ^type; + if (alternateWrite) + type = assembly->GetType("Invoking.Writer1"); + else + type = assembly->GetType("Invoking.Writer2"); + + alternateWrite = !alternateWrite; + + MethodInfo ^ColorMethod = type->GetMethod("aColor"); + + Object ^writerInst = Activator::CreateInstance(type); + + array ^ args = gcnew array (1); + args[0] = PropMethod->Invoke(nullptr,nullptr); + + lbColor->Text = (String^)ColorMethod->Invoke(writerInst, args); + } + }; + + ref class Writer1 + { + public: + String ^aColor(Color ^col) + { + return String::Format("[Writer 1] {0}", col->ToString()); + } + }; + + ref class Writer2 + { + public: + String ^aColor(Color ^col) + { + return String::Format("[Writer 2] {0}", col->ToString()); + } + }; +} + diff --git a/Chapter18/Invoking/Form1.resx b/Chapter18/Invoking/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter18/Invoking/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter18/Invoking/Invoking.cpp b/Chapter18/Invoking/Invoking.cpp new file mode 100644 index 0000000..fea2ebe --- /dev/null +++ b/Chapter18/Invoking/Invoking.cpp @@ -0,0 +1,18 @@ +// Invoking.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace Invoking; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter18/Invoking/Invoking.vcproj b/Chapter18/Invoking/Invoking.vcproj new file mode 100644 index 0000000..9b8c950 --- /dev/null +++ b/Chapter18/Invoking/Invoking.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/Invoking/Invoking.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/Invoking/Invoking.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter18/Invoking/Invoking.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/Invoking/stdafx.cpp b/Chapter18/Invoking/stdafx.cpp new file mode 100644 index 0000000..bbf6ea3 --- /dev/null +++ b/Chapter18/Invoking/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// Invoking.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter18/Invoking/stdafx.h b/Chapter18/Invoking/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter18/Invoking/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter18/MultiCultureApp/AssemblyInfo.cpp b/Chapter18/MultiCultureApp/AssemblyInfo.cpp new file mode 100644 index 0000000..fe1b796 --- /dev/null +++ b/Chapter18/MultiCultureApp/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("MultiCultureApp")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("MultiCultureApp")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter18/MultiCultureApp/Form1.de-DE.resx b/Chapter18/MultiCultureApp/Form1.de-DE.resx new file mode 100644 index 0000000..5226b60 --- /dev/null +++ b/Chapter18/MultiCultureApp/Form1.de-DE.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 113, 9 + + + 265, 23 + + + Hallo, ist mein Name Stephen + + + 390, 43 + + + Deutsch + + \ No newline at end of file diff --git a/Chapter18/MultiCultureApp/Form1.fr-FR.resx b/Chapter18/MultiCultureApp/Form1.fr-FR.resx new file mode 100644 index 0000000..352f62d --- /dev/null +++ b/Chapter18/MultiCultureApp/Form1.fr-FR.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 247, 49 + + + Bonjour, mon nom est Stephen + + + 390, 67 + + + Français + + \ No newline at end of file diff --git a/Chapter18/MultiCultureApp/Form1.h b/Chapter18/MultiCultureApp/Form1.h new file mode 100644 index 0000000..848d5c3 --- /dev/null +++ b/Chapter18/MultiCultureApp/Form1.h @@ -0,0 +1,69 @@ +#pragma once + + +namespace MultiCultureApp +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + using namespace System::Globalization; + using namespace System::Threading; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + Thread::CurrentThread->CurrentCulture = gcnew CultureInfo("fr-fr"); + Thread::CurrentThread->CurrentUICulture = Thread::CurrentThread->CurrentCulture; + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::Label^ lbHello; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + +void InitializeComponent(void) +{ + System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); + this->lbHello = (gcnew System::Windows::Forms::Label()); + this->SuspendLayout(); + // + // lbHello + // + this->lbHello->AccessibleDescription = nullptr; + this->lbHello->AccessibleName = nullptr; + resources->ApplyResources(this->lbHello, L"lbHello"); + this->lbHello->Name = L"lbHello"; + // + // Form1 + // + this->AccessibleDescription = nullptr; + this->AccessibleName = nullptr; + resources->ApplyResources(this, L"$this"); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->BackgroundImage = nullptr; + this->Controls->Add(this->lbHello); + this->Font = nullptr; + this->Icon = nullptr; + this->Name = L"Form1"; + this->ResumeLayout(false); + +} +#pragma endregion + }; +} + diff --git a/Chapter18/MultiCultureApp/Form1.resx b/Chapter18/MultiCultureApp/Form1.resx new file mode 100644 index 0000000..5554966 --- /dev/null +++ b/Chapter18/MultiCultureApp/Form1.resx @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + lbHello + + + $this + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 12, 9 + + + 390, 48 + + + 0 + + + 364, 23 + + + Hello, my name is Stephen + + + English + + + Microsoft Sans Serif, 12pt, style=Bold + + + + 0 + + + 6, 13 + + + Form1 + + + True + + \ No newline at end of file diff --git a/Chapter18/MultiCultureApp/MultiCultureApp.cpp b/Chapter18/MultiCultureApp/MultiCultureApp.cpp new file mode 100644 index 0000000..e85f5f7 --- /dev/null +++ b/Chapter18/MultiCultureApp/MultiCultureApp.cpp @@ -0,0 +1,18 @@ +// MultiCultureApp.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace MultiCultureApp; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter18/MultiCultureApp/MultiCultureApp.vcproj b/Chapter18/MultiCultureApp/MultiCultureApp.vcproj new file mode 100644 index 0000000..bd396e9 --- /dev/null +++ b/Chapter18/MultiCultureApp/MultiCultureApp.vcproj @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/MultiCultureApp/MultiCultureApp.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/MultiCultureApp/MultiCultureApp.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter18/MultiCultureApp/MultiCultureApp.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/MultiCultureApp/stdafx.cpp b/Chapter18/MultiCultureApp/stdafx.cpp new file mode 100644 index 0000000..68e4fe1 --- /dev/null +++ b/Chapter18/MultiCultureApp/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MultiCultureApp.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter18/MultiCultureApp/stdafx.h b/Chapter18/MultiCultureApp/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter18/MultiCultureApp/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter18/MultiCultureConsole/Colors.fr-fr.resx b/Chapter18/MultiCultureConsole/Colors.fr-fr.resx new file mode 100644 index 0000000..9e27569 --- /dev/null +++ b/Chapter18/MultiCultureConsole/Colors.fr-fr.resx @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rouge + + + Bleu + + + Vert + + + Jaune + + \ No newline at end of file diff --git a/Chapter18/MultiCultureConsole/Colors.resx b/Chapter18/MultiCultureConsole/Colors.resx new file mode 100644 index 0000000..872efb5 --- /dev/null +++ b/Chapter18/MultiCultureConsole/Colors.resx @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Red + + + Blue + + + Green + + + Yellow + + \ No newline at end of file diff --git a/Chapter18/MultiCultureConsole/MultiCultureConsole.cpp b/Chapter18/MultiCultureConsole/MultiCultureConsole.cpp new file mode 100644 index 0000000..67ee616 --- /dev/null +++ b/Chapter18/MultiCultureConsole/MultiCultureConsole.cpp @@ -0,0 +1,24 @@ +using namespace System; +using namespace System::Reflection; +using namespace System::Resources; +using namespace System::Threading; +using namespace System::Globalization; + +void main() +{ + Assembly ^assembly = Assembly::GetExecutingAssembly(); + ResourceManager ^rmgr = + gcnew ResourceManager("MulticultureConsole.Colors", assembly); + + Console::WriteLine(rmgr->GetObject("Color1")); + Console::WriteLine(rmgr->GetObject("Color2")); + Console::WriteLine(rmgr->GetObject("Color3")); + Console::WriteLine(rmgr->GetObject("Color4")); + + Thread::CurrentThread->CurrentUICulture = gcnew CultureInfo("fr-fr"); + + Console::WriteLine(rmgr->GetObject("Color1")); + Console::WriteLine(rmgr->GetObject("Color2")); + Console::WriteLine(rmgr->GetObject("Color3")); + Console::WriteLine(rmgr->GetObject("Color4")); +} \ No newline at end of file diff --git a/Chapter18/MultiCultureConsole/MultiCultureConsole.vcproj b/Chapter18/MultiCultureConsole/MultiCultureConsole.vcproj new file mode 100644 index 0000000..94f0d77 --- /dev/null +++ b/Chapter18/MultiCultureConsole/MultiCultureConsole.vcproj @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/MultiCultureConsole/MultiCultureConsole.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/MultiCultureConsole/MultiCultureConsole.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter18/MultiCultureConsole/MultiCultureConsole.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/MultiCultureDate/MultiCultureDate.cpp b/Chapter18/MultiCultureDate/MultiCultureDate.cpp new file mode 100644 index 0000000..319c961 --- /dev/null +++ b/Chapter18/MultiCultureDate/MultiCultureDate.cpp @@ -0,0 +1,12 @@ +using namespace System; +using namespace System::Globalization; + +void main() +{ + DateTime dt = DateTime::Now; + + Console::WriteLine("en-us {0}", dt.ToString("D", gcnew CultureInfo("en-us"))); + Console::WriteLine("en-gb {0}", dt.ToString("D", gcnew CultureInfo("en-gb"))); + Console::WriteLine("fr-fr {0}", dt.ToString("D", gcnew CultureInfo("fr-fr"))); + Console::WriteLine("de-de {0}", dt.ToString("D", gcnew CultureInfo("de-de"))); +} \ No newline at end of file diff --git a/Chapter18/MultiCultureDate/MultiCultureDate.vcproj b/Chapter18/MultiCultureDate/MultiCultureDate.vcproj new file mode 100644 index 0000000..d72de8a --- /dev/null +++ b/Chapter18/MultiCultureDate/MultiCultureDate.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/MultiCultureDate/MultiCultureDate.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/MultiCultureDate/MultiCultureDate.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter18/MultiCultureDate/MultiCultureDate.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.cpp b/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.cpp new file mode 100644 index 0000000..b7e0da6 --- /dev/null +++ b/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.cpp @@ -0,0 +1,8 @@ +using namespace System; +using namespace SharedAssembly; + +void main() +{ + SharedClass ^sa = gcnew SharedClass(); + Console::WriteLine(sa->Version); +} diff --git a/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.exe.config b/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.exe.config new file mode 100644 index 0000000..8539b7f --- /dev/null +++ b/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.exe.config @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.vcproj b/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.vcproj new file mode 100644 index 0000000..ec04b65 --- /dev/null +++ b/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.vcproj @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..196a6d1 --- /dev/null +++ b/Chapter18/ReferenceSharedAssembly/ReferenceSharedAssembly.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/Reflecting/AssemblyInfo.cpp b/Chapter18/Reflecting/AssemblyInfo.cpp new file mode 100644 index 0000000..ac80439 --- /dev/null +++ b/Chapter18/Reflecting/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("Reflecting")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("Reflecting")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/Chapter18/Reflecting/Form1.h b/Chapter18/Reflecting/Form1.h new file mode 100644 index 0000000..636c0f0 --- /dev/null +++ b/Chapter18/Reflecting/Form1.h @@ -0,0 +1,252 @@ +#pragma once + + +namespace Reflecting +{ + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + using namespace System::Reflection; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + + private: + System::Windows::Forms::Label^ label3; + System::Windows::Forms::Label^ label4; + System::Windows::Forms::Label^ label5; + System::Windows::Forms::ListBox^ lbMethods; + System::Windows::Forms::ListBox^ lbProperties; + System::Windows::Forms::ListBox^ lbVariables; + System::Windows::Forms::GroupBox^ groupBox1; + System::Windows::Forms::ComboBox^ cbDataTypes; + System::Windows::Forms::ComboBox^ cbAssemblies; + System::Windows::Forms::Label^ label2; + System::Windows::Forms::Label^ label1; + + array^ types; + static array^ assemblies = + { + "System", + "System.Drawing", + "System.Xml", + "System.Windows.Forms", + "System.Data", + "mscorlib" + }; + + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->label3 = (gcnew System::Windows::Forms::Label()); + this->label4 = (gcnew System::Windows::Forms::Label()); + this->label5 = (gcnew System::Windows::Forms::Label()); + this->lbMethods = (gcnew System::Windows::Forms::ListBox()); + this->lbProperties = (gcnew System::Windows::Forms::ListBox()); + this->lbVariables = (gcnew System::Windows::Forms::ListBox()); + this->groupBox1 = (gcnew System::Windows::Forms::GroupBox()); + this->cbDataTypes = (gcnew System::Windows::Forms::ComboBox()); + this->cbAssemblies = (gcnew System::Windows::Forms::ComboBox()); + this->label2 = (gcnew System::Windows::Forms::Label()); + this->label1 = (gcnew System::Windows::Forms::Label()); + this->groupBox1->SuspendLayout(); + this->SuspendLayout(); + // + // label3 + // + this->label3->AutoSize = true; + this->label3->Location = System::Drawing::Point(15, 94); + this->label3->Name = L"label3"; + this->label3->Size = System::Drawing::Size(51, 13); + this->label3->TabIndex = 11; + this->label3->Text = L"Methods:"; + // + // label4 + // + this->label4->AutoSize = true; + this->label4->Location = System::Drawing::Point(320, 94); + this->label4->Name = L"label4"; + this->label4->Size = System::Drawing::Size(57, 13); + this->label4->TabIndex = 12; + this->label4->Text = L"Properties:"; + // + // label5 + // + this->label5->AutoSize = true; + this->label5->Location = System::Drawing::Point(585, 94); + this->label5->Name = L"label5"; + this->label5->Size = System::Drawing::Size(53, 13); + this->label5->TabIndex = 13; + this->label5->Text = L"Variables:"; + // + // lbMethods + // + this->lbMethods->FormattingEnabled = true; + this->lbMethods->Location = System::Drawing::Point(15, 114); + this->lbMethods->Name = L"lbMethods"; + this->lbMethods->Size = System::Drawing::Size(293, 251); + this->lbMethods->TabIndex = 14; + // + // lbProperties + // + this->lbProperties->FormattingEnabled = true; + this->lbProperties->Location = System::Drawing::Point(320, 114); + this->lbProperties->Name = L"lbProperties"; + this->lbProperties->Size = System::Drawing::Size(250, 251); + this->lbProperties->TabIndex = 15; + // + // lbVariables + // + this->lbVariables->FormattingEnabled = true; + this->lbVariables->Location = System::Drawing::Point(585, 114); + this->lbVariables->Name = L"lbVariables"; + this->lbVariables->Size = System::Drawing::Size(202, 251); + this->lbVariables->TabIndex = 16; + // + // groupBox1 + // + this->groupBox1->Controls->Add(this->cbDataTypes); + this->groupBox1->Controls->Add(this->cbAssemblies); + this->groupBox1->Controls->Add(this->label2); + this->groupBox1->Controls->Add(this->label1); + this->groupBox1->Location = System::Drawing::Point(14, 12); + this->groupBox1->Name = L"groupBox1"; + this->groupBox1->Size = System::Drawing::Size(443, 72); + this->groupBox1->TabIndex = 10; + this->groupBox1->TabStop = false; + // + // cbDataTypes + // + this->cbDataTypes->FormattingEnabled = true; + this->cbDataTypes->Location = System::Drawing::Point(120, 41); + this->cbDataTypes->Name = L"cbDataTypes"; + this->cbDataTypes->Size = System::Drawing::Size(287, 21); + this->cbDataTypes->TabIndex = 3; + this->cbDataTypes->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::cbDataTypes_SelectedIndexChanged); + // + // cbAssemblies + // + this->cbAssemblies->FormattingEnabled = true; + this->cbAssemblies->Location = System::Drawing::Point(120, 16); + this->cbAssemblies->Name = L"cbAssemblies"; + this->cbAssemblies->Size = System::Drawing::Size(287, 21); + this->cbAssemblies->TabIndex = 2; + this->cbAssemblies->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::cbAssemblies_SelectedIndexChanged); + // + // label2 + // + this->label2->AutoSize = true; + this->label2->Location = System::Drawing::Point(24, 44); + this->label2->Name = L"label2"; + this->label2->Size = System::Drawing::Size(87, 13); + this->label2->TabIndex = 1; + this->label2->Text = L"Select data type:"; + // + // label1 + // + this->label1->AutoSize = true; + this->label1->Location = System::Drawing::Point(24, 19); + this->label1->Name = L"label1"; + this->label1->Size = System::Drawing::Size(86, 13); + this->label1->TabIndex = 0; + this->label1->Text = L"Select assembly:"; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(801, 377); + this->Controls->Add(this->label3); + this->Controls->Add(this->label4); + this->Controls->Add(this->label5); + this->Controls->Add(this->lbMethods); + this->Controls->Add(this->lbProperties); + this->Controls->Add(this->lbVariables); + this->Controls->Add(this->groupBox1); + this->Name = L"Form1"; + this->Text = L"Assembly Viewer"; + this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); + this->groupBox1->ResumeLayout(false); + this->groupBox1->PerformLayout(); + this->ResumeLayout(false); + this->PerformLayout(); + } + +#pragma endregion + + private: + System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) + { + for each (String ^assembly in assemblies) + { + cbAssemblies->Items->Add(assembly); + } + cbAssemblies->SelectedIndex = 0; + } + + private: + System::Void cbAssemblies_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) + { + Assembly^ assembly = Assembly::LoadWithPartialName( + assemblies[cbAssemblies->SelectedIndex]); + + types = assembly->GetTypes(); + + cbDataTypes->Items->Clear(); + + for (int i = 0; i < types->Length; i++) + { + cbDataTypes->Items->Add(types[i]->ToString()); + } + cbDataTypes->SelectedIndex = 0; + } + + private: + System::Void cbDataTypes_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) + { + Type ^type = types[cbDataTypes->SelectedIndex]; + + array ^ methods = type->GetMethods(); + lbMethods->Items->Clear(); + for (int i = 0; i < methods->Length; i++) + { + lbMethods->Items->Add(methods[i]->ToString()); + } + + array ^ properties = type->GetProperties(); + lbProperties->Items->Clear(); + for (int i = 0; i < properties->Length; i++) + { + lbProperties->Items->Add(properties[i]->ToString()); + } + + array ^ variables = type->GetFields(); + lbVariables->Items->Clear(); + for (int i = 0; i < variables->Length; i++) + { + lbVariables->Items->Add(variables[i]->ToString()); + } + } + }; +} + diff --git a/Chapter18/Reflecting/Form1.resx b/Chapter18/Reflecting/Form1.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Chapter18/Reflecting/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter18/Reflecting/Reflecting.cpp b/Chapter18/Reflecting/Reflecting.cpp new file mode 100644 index 0000000..7a04eac --- /dev/null +++ b/Chapter18/Reflecting/Reflecting.cpp @@ -0,0 +1,18 @@ +// Reflecting.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace Reflecting; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter18/Reflecting/Reflecting.vcproj b/Chapter18/Reflecting/Reflecting.vcproj new file mode 100644 index 0000000..b4a2038 --- /dev/null +++ b/Chapter18/Reflecting/Reflecting.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/Reflecting/Reflecting.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/Reflecting/Reflecting.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..8e1b0da --- /dev/null +++ b/Chapter18/Reflecting/Reflecting.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter18/Reflecting/stdafx.cpp b/Chapter18/Reflecting/stdafx.cpp new file mode 100644 index 0000000..dacea22 --- /dev/null +++ b/Chapter18/Reflecting/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// Reflecting.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter18/Reflecting/stdafx.h b/Chapter18/Reflecting/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter18/Reflecting/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter18/SharedAssembly/AssemblyInfo.cpp b/Chapter18/SharedAssembly/AssemblyInfo.cpp new file mode 100644 index 0000000..4d7d3b4 --- /dev/null +++ b/Chapter18/SharedAssembly/AssemblyInfo.cpp @@ -0,0 +1,57 @@ +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("A Shared Assembly")]; +[assembly:AssemblyDescriptionAttribute("An assembly that knows its version")]; +[assembly:AssemblyConfigurationAttribute("Release Version")]; +[assembly:AssemblyCompanyAttribute("ProCppCLI")]; +[assembly:AssemblyProductAttribute("Pro C++/CLI Series")]; +[assembly:AssemblyCopyrightAttribute("Copyright (C) by Stephen Fraser 2005")]; +[assembly:AssemblyTrademarkAttribute("ProCppCLI is a Trademark of blah")]; +[assembly:AssemblyCultureAttribute("")]; +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.1.0.0")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("SharedAssembly.snk")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; diff --git a/Chapter18/SharedAssembly/SharedAssembly.cpp b/Chapter18/SharedAssembly/SharedAssembly.cpp new file mode 100644 index 0000000..74e7d26 --- /dev/null +++ b/Chapter18/SharedAssembly/SharedAssembly.cpp @@ -0,0 +1,2 @@ +#include "SharedAssembly.h" + diff --git a/Chapter18/SharedAssembly/SharedAssembly.h b/Chapter18/SharedAssembly/SharedAssembly.h new file mode 100644 index 0000000..7faa06d --- /dev/null +++ b/Chapter18/SharedAssembly/SharedAssembly.h @@ -0,0 +1,20 @@ +#pragma once + +using namespace System; +using namespace System::Reflection; + +namespace SharedAssembly +{ + public ref class SharedClass + { + public: + property System::Version^ Version + { + System::Version^ get() + { + Assembly ^assembly = Assembly::GetExecutingAssembly(); + return assembly->GetName()->Version; + } + } + }; +} diff --git a/Chapter18/SharedAssembly/SharedAssembly.snk b/Chapter18/SharedAssembly/SharedAssembly.snk new file mode 100644 index 0000000000000000000000000000000000000000..b3879528215edbe36dead9b92d644a71e34d5f7d GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50096oQ^Z@N0qzv3MdHK_Yz~8fXtQ-Q;fiER zo)o{bs$TxbfF)Ab2;&8`>K1l9yX5;AKudqSdL@ErcwL-(LX7j6CyHNw>ytW~B;dzG zwc|#9Th;OeGYGyRB&svSxZ^f5WoW?uLJ1 zbLq?!0+9(lvo7%e3m+sV+J?flBr_#9_}I0l%T4470L<_=-FpJ;VlYYe>RpgTck3YgMuwS5ZL`zy(U?bK>`uw-}dI%>MRY5}o<0nj; z<>EUcw}IpOVyg%Z0wcU~2O$*Z-*k{3G~oxeq{jAuItC0iHI$F~O$ZeqK@_%}+fG+PNc;hS}7w?b0z;-BA({Qov0Z1l2PG#rF$I z6@^!fGijYcWs5k5Po1fT>@^Lp)q{~Ym+XP)C#E6td7XR+a@q4D`S_~A38H2~vOeU9 zwqJViQ%s2jSn8crD?Jp+G03b+SLQoKK-y|DrC&b)ZPcN_#kmYuC4hCT!?LEoelAQB i0%bp;79XZ6E31mKn6%6{NhholP53IRw?E{O>NS`_))W{3 literal 0 HcmV?d00001 diff --git a/Chapter18/SharedAssembly/SharedAssembly.vcproj b/Chapter18/SharedAssembly/SharedAssembly.vcproj new file mode 100644 index 0000000..20a594f --- /dev/null +++ b/Chapter18/SharedAssembly/SharedAssembly.vcproj @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter18/SharedAssembly/SharedAssembly.vcproj.AMIDALA.Stephen Fraser.user b/Chapter18/SharedAssembly/SharedAssembly.vcproj.AMIDALA.Stephen Fraser.user new file mode 100644 index 0000000..b1fac18 --- /dev/null +++ b/Chapter18/SharedAssembly/SharedAssembly.vcproj.AMIDALA.Stephen Fraser.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/Chapter19/AssertDenyPermit/AssemblyInfo.cpp b/Chapter19/AssertDenyPermit/AssemblyInfo.cpp new file mode 100644 index 0000000..72bdf1d --- /dev/null +++ b/Chapter19/AssertDenyPermit/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("AssertDenyPermit")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("AssertDenyPermit")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter19/AssertDenyPermit/AssertDenyPermit.cpp b/Chapter19/AssertDenyPermit/AssertDenyPermit.cpp new file mode 100644 index 0000000..3f89d35 --- /dev/null +++ b/Chapter19/AssertDenyPermit/AssertDenyPermit.cpp @@ -0,0 +1,64 @@ +// AssertDenyPermit.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace System::IO; +using namespace System::Security; +using namespace System::Security::Permissions; + +void AssertRead() +{ + CodeAccessPermission ^permission = + gcnew FileIOPermission(FileIOPermissionAccess::Read, "C:\\"); + + permission->Assert(); + StreamReader ^sr = File::OpenText("C:\\TestFile.txt"); + String ^s = sr->ReadLine(); + sr->Close(); + permission->RevertAssert(); + Console::WriteLine("Successful Read"); +} + +void NoAssertRead() +{ + StreamReader ^sr = File::OpenText("C:\\TestFile.txt"); + String ^s = sr->ReadLine(); + sr->Close(); + Console::WriteLine("Successful Read"); +} + +void main() +{ + // Deny Reading C: + CodeAccessPermission ^permissionRead = + gcnew FileIOPermission(FileIOPermissionAccess::Read, "C:\\"); + + permissionRead->Deny(); + try + { + AssertRead(); + NoAssertRead(); + } + catch(SecurityException^) + { + Console::WriteLine("Failed To Read"); + } + permissionRead->RevertDeny(); + + // Only allow Writing to C: + CodeAccessPermission ^permissionWrite = + gcnew FileIOPermission(FileIOPermissionAccess::Write, "C:\\"); + + permissionWrite->PermitOnly(); + try + { + AssertRead(); + NoAssertRead(); + } + catch(SecurityException^) + { + Console::WriteLine("Failed To Read\n"); + } + permissionWrite->RevertPermitOnly(); +} diff --git a/Chapter19/AssertDenyPermit/AssertDenyPermit.vcproj b/Chapter19/AssertDenyPermit/AssertDenyPermit.vcproj new file mode 100644 index 0000000..ce03ee6 --- /dev/null +++ b/Chapter19/AssertDenyPermit/AssertDenyPermit.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter19/AssertDenyPermit/ReadMe.txt b/Chapter19/AssertDenyPermit/ReadMe.txt new file mode 100644 index 0000000..817bddc --- /dev/null +++ b/Chapter19/AssertDenyPermit/ReadMe.txt @@ -0,0 +1,28 @@ +======================================================================== + APPLICATION : AssertDenyPermit Project Overview +======================================================================== + +AppWizard has created this AssertDenyPermit Application for you. + +This file contains a summary of what you will find in each of the files that +make up your AssertDenyPermit application. + +AssertDenyPermit.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +AssertDenyPermit.cpp + This is the main application source file. + +AssemblyInfo.cpp + Contains custom attributes for modifying assembly metadata. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff --git a/Chapter19/AssertDenyPermit/app.ico b/Chapter19/AssertDenyPermit/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Chapter19/AssertDenyPermit/app.rc b/Chapter19/AssertDenyPermit/app.rc new file mode 100644 index 0000000..807aa89 --- /dev/null +++ b/Chapter19/AssertDenyPermit/app.rc @@ -0,0 +1,63 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon placed first or with lowest ID value becomes application icon + +LANGUAGE 9, 1 +#pragma code_page(1252) +1 ICON "app.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Chapter19/AssertDenyPermit/resource.h b/Chapter19/AssertDenyPermit/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter19/AssertDenyPermit/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter19/AssertDenyPermit/stdafx.cpp b/Chapter19/AssertDenyPermit/stdafx.cpp new file mode 100644 index 0000000..17378da --- /dev/null +++ b/Chapter19/AssertDenyPermit/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// AssertDenyPermit.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter19/AssertDenyPermit/stdafx.h b/Chapter19/AssertDenyPermit/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter19/AssertDenyPermit/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter19/CASSecurity/AssemblyInfo.cpp b/Chapter19/CASSecurity/AssemblyInfo.cpp new file mode 100644 index 0000000..2fd8a17 --- /dev/null +++ b/Chapter19/CASSecurity/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("CASSecurity")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("CASSecurity")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter19/CASSecurity/CASSecurity.cpp b/Chapter19/CASSecurity/CASSecurity.cpp new file mode 100644 index 0000000..f28b723 --- /dev/null +++ b/Chapter19/CASSecurity/CASSecurity.cpp @@ -0,0 +1,16 @@ +// CASSecurity.cpp : main project file. + +#include "stdafx.h" +#include "Form1.h" + +using namespace CASSecurity; + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} diff --git a/Chapter19/CASSecurity/CASSecurity.vcproj b/Chapter19/CASSecurity/CASSecurity.vcproj new file mode 100644 index 0000000..4259216 --- /dev/null +++ b/Chapter19/CASSecurity/CASSecurity.vcproj @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter19/CASSecurity/Form1.h b/Chapter19/CASSecurity/Form1.h new file mode 100644 index 0000000..7c3b103 --- /dev/null +++ b/Chapter19/CASSecurity/Form1.h @@ -0,0 +1,133 @@ +#pragma once +using namespace System; +using namespace System::ComponentModel; +using namespace System::Collections; +using namespace System::IO; +using namespace System::Windows::Forms; +using namespace System::Data; +using namespace System::Drawing; + +using namespace System::Security; +using namespace System::Security::Permissions; + + +namespace CASSecurity +{ + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + try + { + (gcnew FileIOPermission(FileIOPermissionAccess::Read, "C:\\"))->Demand(); + } + catch(Exception^) + { + bnReadFile->Enabled = false; + } + + try + { + (gcnew FileIOPermission(FileIOPermissionAccess::Write, "C:\\"))->Demand(); + } + catch(Exception^) + { + bnWriteFile->Enabled = false; + } + } + + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: + System::Windows::Forms::Label^ lbOutput; + System::Windows::Forms::Button^ bnWriteFile; + System::Windows::Forms::Button^ bnReadFile; + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + + void InitializeComponent(void) + { + this->lbOutput = (gcnew System::Windows::Forms::Label()); + this->bnWriteFile = (gcnew System::Windows::Forms::Button()); + this->bnReadFile = (gcnew System::Windows::Forms::Button()); + this->SuspendLayout(); + // + // lbOutput + // + this->lbOutput->AutoSize = true; + this->lbOutput->Location = System::Drawing::Point(68, 71); + this->lbOutput->Name = L"lbOutput"; + this->lbOutput->Size = System::Drawing::Size(0, 13); + this->lbOutput->TabIndex = 5; + // + // bnWriteFile + // + this->bnWriteFile->Location = System::Drawing::Point(170, 30); + this->bnWriteFile->Name = L"bnWriteFile"; + this->bnWriteFile->Size = System::Drawing::Size(75, 23); + this->bnWriteFile->TabIndex = 4; + this->bnWriteFile->Text = L"Write File"; + this->bnWriteFile->UseVisualStyleBackColor = true; + this->bnWriteFile->Click += + gcnew System::EventHandler(this, &Form1::bnWriteFile_Click); + // + // bnReadFile + // + this->bnReadFile->Location = System::Drawing::Point(48, 30); + this->bnReadFile->Name = L"bnReadFile"; + this->bnReadFile->Size = System::Drawing::Size(75, 23); + this->bnReadFile->TabIndex = 3; + this->bnReadFile->Text = L"Read File"; + this->bnReadFile->UseVisualStyleBackColor = true; + this->bnReadFile->Click += + gcnew System::EventHandler(this, &Form1::bnReadFile_Click); + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(292, 110); + this->Controls->Add(this->lbOutput); + this->Controls->Add(this->bnWriteFile); + this->Controls->Add(this->bnReadFile); + this->Name = L"Form1"; + this->Text = L"CAS Security Test"; + this->ResumeLayout(false); + this->PerformLayout(); + + } +#pragma endregion + + private: + System::Void bnReadFile_Click(System::Object^ sender, + System::EventArgs^ e) + { + StreamReader ^sr = File::OpenText("C:\\TestFile.txt"); + String ^s = sr->ReadLine(); + sr->Close(); + lbOutput->Text = s; + } + + private: + System::Void bnWriteFile_Click(System::Object^ sender, + System::EventArgs^ e) + { + StreamWriter ^sw = File::CreateText("C:\\TestFile.txt"); + sw->WriteLine("This is a test. This is only a test."); + sw->Close(); + lbOutput->Text = "Wrote text to file."; + } + }; +} + diff --git a/Chapter19/CASSecurity/Form1.resx b/Chapter19/CASSecurity/Form1.resx new file mode 100644 index 0000000..de824e1 --- /dev/null +++ b/Chapter19/CASSecurity/Form1.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter19/CASSecurity/ReadMe.txt b/Chapter19/CASSecurity/ReadMe.txt new file mode 100644 index 0000000..ce603ae --- /dev/null +++ b/Chapter19/CASSecurity/ReadMe.txt @@ -0,0 +1,33 @@ +======================================================================== + APPLICATION : CASSecurity Project Overview +======================================================================== + +AppWizard has created this CASSecurity Application for you. + +This file contains a summary of what you will find in each of the files that +make up your CASSecurity application. + +CASSecurity.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +CASSecurity.cpp + This is the main application source file. + Contains the code to display the form. + +Form1.h + Contains the implementation of your form class and InitializeComponent() function. + +AssemblyInfo.cpp + Contains custom attributes for modifying assembly metadata. + +///////////////////////////////////////////////////////////////////////////// +Other standard files: + +StdAfx.h, StdAfx.cpp + These files are used to build a precompiled header (PCH) file + named CASSecurity.pch and a precompiled types file named StdAfx.obj. + +///////////////////////////////////////////////////////////////////////////// diff --git a/Chapter19/CASSecurity/app.ico b/Chapter19/CASSecurity/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Chapter19/CASSecurity/app.rc b/Chapter19/CASSecurity/app.rc new file mode 100644 index 0000000..807aa89 --- /dev/null +++ b/Chapter19/CASSecurity/app.rc @@ -0,0 +1,63 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon placed first or with lowest ID value becomes application icon + +LANGUAGE 9, 1 +#pragma code_page(1252) +1 ICON "app.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Chapter19/CASSecurity/resource.h b/Chapter19/CASSecurity/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter19/CASSecurity/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter19/CASSecurity/stdafx.cpp b/Chapter19/CASSecurity/stdafx.cpp new file mode 100644 index 0000000..86326ce --- /dev/null +++ b/Chapter19/CASSecurity/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// CASSecurity.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter19/CASSecurity/stdafx.h b/Chapter19/CASSecurity/stdafx.h new file mode 100644 index 0000000..46bef73 --- /dev/null +++ b/Chapter19/CASSecurity/stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter19/Chapter19.sln b/Chapter19/Chapter19.sln new file mode 100644 index 0000000..477d28a --- /dev/null +++ b/Chapter19/Chapter19.sln @@ -0,0 +1,104 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SetSecurity", "SetSecurity\SetSecurity.vcproj", "{02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RemoveSecurity", "RemoveSecurity\RemoveSecurity.vcproj", "{8793DD60-C6D6-4837-9747-4ED70B43005B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PrincipalIdentity", "PrincipalIdentity\PrincipalIdentity.vcproj", "{6932E750-A729-4D5D-8848-C0B913BB9BF4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RoleBasedSecurity", "RoleBasedSecurity\RoleBasedSecurity.vcproj", "{53D3B2F5-45A0-4452-9853-B67A3280C3F7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CASSecurity", "CASSecurity\CASSecurity.vcproj", "{38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AssertDenyPermit", "AssertDenyPermit\AssertDenyPermit.vcproj", "{0E1222E4-441C-44ED-84D9-B75F74CD2770}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Debug|.NET.ActiveCfg = Debug|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Debug|Win32.ActiveCfg = Debug|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Debug|Win32.Build.0 = Debug|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Release|.NET.ActiveCfg = Release|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Release|Any CPU.ActiveCfg = Release|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Release|Mixed Platforms.Build.0 = Release|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Release|Win32.ActiveCfg = Release|Win32 + {02BD6EEB-F758-4CCC-9374-2B36BFAF03DF}.Release|Win32.Build.0 = Release|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Debug|.NET.ActiveCfg = Debug|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Debug|Win32.ActiveCfg = Debug|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Debug|Win32.Build.0 = Debug|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Release|.NET.ActiveCfg = Release|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Release|Any CPU.ActiveCfg = Release|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Release|Mixed Platforms.Build.0 = Release|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Release|Win32.ActiveCfg = Release|Win32 + {8793DD60-C6D6-4837-9747-4ED70B43005B}.Release|Win32.Build.0 = Release|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Debug|.NET.ActiveCfg = Debug|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Debug|Win32.ActiveCfg = Debug|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Debug|Win32.Build.0 = Debug|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Release|.NET.ActiveCfg = Release|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Release|Any CPU.ActiveCfg = Release|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Release|Mixed Platforms.Build.0 = Release|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Release|Win32.ActiveCfg = Release|Win32 + {6932E750-A729-4D5D-8848-C0B913BB9BF4}.Release|Win32.Build.0 = Release|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Debug|.NET.ActiveCfg = Debug|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Debug|Win32.ActiveCfg = Debug|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Debug|Win32.Build.0 = Debug|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Release|.NET.ActiveCfg = Release|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Release|Any CPU.ActiveCfg = Release|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Release|Mixed Platforms.Build.0 = Release|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Release|Win32.ActiveCfg = Release|Win32 + {53D3B2F5-45A0-4452-9853-B67A3280C3F7}.Release|Win32.Build.0 = Release|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Debug|.NET.ActiveCfg = Debug|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Debug|Win32.ActiveCfg = Debug|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Debug|Win32.Build.0 = Debug|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Release|.NET.ActiveCfg = Release|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Release|Any CPU.ActiveCfg = Release|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Release|Mixed Platforms.Build.0 = Release|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Release|Win32.ActiveCfg = Release|Win32 + {38AA823C-B6A3-477E-B9F6-2E55F0DF5C24}.Release|Win32.Build.0 = Release|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Debug|.NET.ActiveCfg = Debug|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Debug|Win32.ActiveCfg = Debug|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Debug|Win32.Build.0 = Debug|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Release|.NET.ActiveCfg = Release|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Release|Any CPU.ActiveCfg = Release|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Release|Mixed Platforms.Build.0 = Release|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Release|Win32.ActiveCfg = Release|Win32 + {0E1222E4-441C-44ED-84D9-B75F74CD2770}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter19/Chapter19.suo b/Chapter19/Chapter19.suo new file mode 100644 index 0000000000000000000000000000000000000000..a9b3396a069f983089010371b4fa916ac78f4ba0 GIT binary patch literal 24064 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 literal 0 HcmV?d00001 diff --git a/Chapter19/PrincipalIdentity/AssemblyInfo.cpp b/Chapter19/PrincipalIdentity/AssemblyInfo.cpp new file mode 100644 index 0000000..22c8564 --- /dev/null +++ b/Chapter19/PrincipalIdentity/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("PrincipalIdentity")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("PrincipalIdentity")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter19/PrincipalIdentity/PrincipalIdentity.cpp b/Chapter19/PrincipalIdentity/PrincipalIdentity.cpp new file mode 100644 index 0000000..f76e943 --- /dev/null +++ b/Chapter19/PrincipalIdentity/PrincipalIdentity.cpp @@ -0,0 +1,59 @@ +// PrincipalIdentity.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace System::Security; +using namespace System::Security::Principal; +using namespace System::Threading; + +void main() +{ + // set policy from UnauthenticatedPrincipal to WindowsPrincipal + AppDomain::CurrentDomain->SetPrincipalPolicy( + PrincipalPolicy::WindowsPrincipal); + + // ---------------------------------------------------------------------- + // Get Windows Principal and Identity + // ---------------------------------------------------------------------- + + Console::WriteLine("Windows Principal & Identity"); + Console::WriteLine("----------------------------"); + + WindowsPrincipal ^wPrinc = (WindowsPrincipal^)Thread::CurrentPrincipal; + + Console::WriteLine("Is an Administrator?: {0}", + wPrinc->IsInRole(WindowsBuiltInRole::Administrator)); + Console::WriteLine("Is a Hacker?: {0}", wPrinc->IsInRole("Hacker")); + + WindowsIdentity ^wIdent = (WindowsIdentity^)wPrinc->Identity; + + Console::WriteLine("\nWindows Login Name: {0}", wIdent->Name); + Console::WriteLine("Authentication Type: {0}", wIdent->AuthenticationType); + Console::WriteLine("Is Authenticated: {0}", wIdent->IsAuthenticated); + Console::WriteLine("Is System Account: {0}", wIdent->IsSystem); + + // ---------------------------------------------------------------------- + // Create (Hacker) Principal and Identity + // ---------------------------------------------------------------------- + + Console::WriteLine("\n\nGeneric Principal & Identity"); + Console::WriteLine("----------------------------"); + + array^ rolesArray = {"Hacker"}; + + // Set the principal to a new generic principal. + Thread::CurrentPrincipal = + gcnew GenericPrincipal(gcnew GenericIdentity("John Doe"), rolesArray); + + GenericPrincipal ^gPrinc = (GenericPrincipal^)Thread::CurrentPrincipal; + + Console::WriteLine("Is an Administrator?: {0}", + gPrinc->IsInRole("BUILTIN\\Administrator")); + Console::WriteLine("Is a Hacker?: {0}", gPrinc->IsInRole("Hacker")); + + GenericIdentity ^gIdent = (GenericIdentity^)gPrinc->Identity; + + Console::WriteLine("\nUser Name: {0}", gIdent->Name); + Console::WriteLine("Is Authenticated: {0}\n", gIdent->IsAuthenticated); +} diff --git a/Chapter19/PrincipalIdentity/PrincipalIdentity.vcproj b/Chapter19/PrincipalIdentity/PrincipalIdentity.vcproj new file mode 100644 index 0000000..320aa71 --- /dev/null +++ b/Chapter19/PrincipalIdentity/PrincipalIdentity.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter19/PrincipalIdentity/ReadMe.txt b/Chapter19/PrincipalIdentity/ReadMe.txt new file mode 100644 index 0000000..bab2b05 --- /dev/null +++ b/Chapter19/PrincipalIdentity/ReadMe.txt @@ -0,0 +1,28 @@ +======================================================================== + APPLICATION : PrincipalIdentity Project Overview +======================================================================== + +AppWizard has created this PrincipalIdentity Application for you. + +This file contains a summary of what you will find in each of the files that +make up your PrincipalIdentity application. + +PrincipalIdentity.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +PrincipalIdentity.cpp + This is the main application source file. + +AssemblyInfo.cpp + Contains custom attributes for modifying assembly metadata. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff --git a/Chapter19/PrincipalIdentity/app.ico b/Chapter19/PrincipalIdentity/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Chapter19/PrincipalIdentity/app.rc b/Chapter19/PrincipalIdentity/app.rc new file mode 100644 index 0000000..807aa89 --- /dev/null +++ b/Chapter19/PrincipalIdentity/app.rc @@ -0,0 +1,63 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon placed first or with lowest ID value becomes application icon + +LANGUAGE 9, 1 +#pragma code_page(1252) +1 ICON "app.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Chapter19/PrincipalIdentity/resource.h b/Chapter19/PrincipalIdentity/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter19/PrincipalIdentity/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter19/PrincipalIdentity/stdafx.cpp b/Chapter19/PrincipalIdentity/stdafx.cpp new file mode 100644 index 0000000..02db58a --- /dev/null +++ b/Chapter19/PrincipalIdentity/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// PrincipalIdentity.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter19/PrincipalIdentity/stdafx.h b/Chapter19/PrincipalIdentity/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter19/PrincipalIdentity/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter19/RemoveSecurity/AssemblyInfo.cpp b/Chapter19/RemoveSecurity/AssemblyInfo.cpp new file mode 100644 index 0000000..0e8358c --- /dev/null +++ b/Chapter19/RemoveSecurity/AssemblyInfo.cpp @@ -0,0 +1,61 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("RemoveSecurity")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("RemoveSecurity")]; +[assembly:AssemblyCopyrightAttribute("Copyright @ 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter19/RemoveSecurity/ReadMe.txt b/Chapter19/RemoveSecurity/ReadMe.txt new file mode 100644 index 0000000..b4619a2 --- /dev/null +++ b/Chapter19/RemoveSecurity/ReadMe.txt @@ -0,0 +1,28 @@ +======================================================================== + APPLICATION : RemoveSecurity Project Overview +======================================================================== + +AppWizard has created this RemoveSecurity Application for you. + +This file contains a summary of what you will find in each of the files that +make up your RemoveSecurity application. + +RemoveSecurity.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +RemoveSecurity.cpp + This is the main application source file. + +AssemblyInfo.cpp + Contains custom attributes for modifying assembly metadata. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff --git a/Chapter19/RemoveSecurity/RemoveSecurity.cpp b/Chapter19/RemoveSecurity/RemoveSecurity.cpp new file mode 100644 index 0000000..594e851 --- /dev/null +++ b/Chapter19/RemoveSecurity/RemoveSecurity.cpp @@ -0,0 +1,35 @@ +using namespace System; +using namespace System::Security; +using namespace System::Security::Permissions; +using namespace System::Security::Policy; + +void main() +{ + CodeGroup^ machine; + + // Iterate through policy hierarchy to get Machine Code group + System::Collections::IEnumerator^ ph = SecurityManager::PolicyHierarchy(); + while( ph->MoveNext() ) + { + PolicyLevel^ machinePolicyLevel = (PolicyLevel^)ph->Current; + if (machinePolicyLevel->Label == "Machine") + { + machine = machinePolicyLevel->RootCodeGroup; + break; + } + } + + // Iterate backwards removing all instance of “ReadOnly Secure Group” + for (int i = machine->Children->Count - 1; i >= 0; i--) + { + if(((CodeGroup^)machine->Children[i])->Name == "ReadOnly Secure Group") + { + machine->RemoveChild(((CodeGroup^)machine->Children[i])); + } + } + + // Save changes + SecurityManager::SavePolicy(); + + Console::WriteLine("Removed C:\\ File ReadOnly Secure Group"); +} diff --git a/Chapter19/RemoveSecurity/RemoveSecurity.vcproj b/Chapter19/RemoveSecurity/RemoveSecurity.vcproj new file mode 100644 index 0000000..fa058c3 --- /dev/null +++ b/Chapter19/RemoveSecurity/RemoveSecurity.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter19/RemoveSecurity/app.ico b/Chapter19/RemoveSecurity/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Chapter19/RemoveSecurity/app.rc b/Chapter19/RemoveSecurity/app.rc new file mode 100644 index 0000000..6be44ad --- /dev/null +++ b/Chapter19/RemoveSecurity/app.rc @@ -0,0 +1,52 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon placed first or with lowest ID value becomes application icon + +LANGUAGE 9, 1 +#pragma code_page(1252) +1 ICON "app.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Chapter19/RemoveSecurity/resource.h b/Chapter19/RemoveSecurity/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter19/RemoveSecurity/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter19/RemoveSecurity/stdafx.cpp b/Chapter19/RemoveSecurity/stdafx.cpp new file mode 100644 index 0000000..83b1c67 --- /dev/null +++ b/Chapter19/RemoveSecurity/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// RemoveSecurity.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter19/RemoveSecurity/stdafx.h b/Chapter19/RemoveSecurity/stdafx.h new file mode 100644 index 0000000..5acdcf6 --- /dev/null +++ b/Chapter19/RemoveSecurity/stdafx.h @@ -0,0 +1,10 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +#include + +// TODO: reference additional headers your program requires here diff --git a/Chapter19/RoleBasedSecurity/AssemblyInfo.cpp b/Chapter19/RoleBasedSecurity/AssemblyInfo.cpp new file mode 100644 index 0000000..9952b6a --- /dev/null +++ b/Chapter19/RoleBasedSecurity/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("RoleBasedSecurity")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("RoleBasedSecurity")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter19/RoleBasedSecurity/ReadMe.txt b/Chapter19/RoleBasedSecurity/ReadMe.txt new file mode 100644 index 0000000..de6fd47 --- /dev/null +++ b/Chapter19/RoleBasedSecurity/ReadMe.txt @@ -0,0 +1,28 @@ +======================================================================== + APPLICATION : RoleBasedSecurity Project Overview +======================================================================== + +AppWizard has created this RoleBasedSecurity Application for you. + +This file contains a summary of what you will find in each of the files that +make up your RoleBasedSecurity application. + +RoleBasedSecurity.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +RoleBasedSecurity.cpp + This is the main application source file. + +AssemblyInfo.cpp + Contains custom attributes for modifying assembly metadata. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff --git a/Chapter19/RoleBasedSecurity/RoleBasedSecurity.cpp b/Chapter19/RoleBasedSecurity/RoleBasedSecurity.cpp new file mode 100644 index 0000000..2b351f9 --- /dev/null +++ b/Chapter19/RoleBasedSecurity/RoleBasedSecurity.cpp @@ -0,0 +1,67 @@ +// RoleBasedSecurity.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace System::Security; +using namespace System::Security::Principal; +using namespace System::Security::Permissions; +using namespace System::Threading; + +[PrincipalPermissionAttribute(SecurityAction::Demand, Role = "NotAHacker")] +void DeclarativeSecurity() +{ + Console::WriteLine("I'm in the Declarative Security Function"); +} + +void DemandSecurity() +{ + (gcnew PrincipalPermission(nullptr, "NotAHacker"))->Demand(); + + Console::WriteLine("I'm in the Demand Security Function\n"); +} + +void main() +{ + try + { + DeclarativeSecurity(); + + } + catch (SecurityException^) + { + Console::WriteLine("SECURITY ERROR in Declarative Security Function"); + } + + try + { + DemandSecurity(); + } + catch (SecurityException^) + { + Console::WriteLine("SECURITY ERROR in Demand Security Function\n"); + } + + Console::WriteLine("Set CurrentPrincipal to John with role of NotAHacker"); + array^ rolesArray = {"NotAHacker"}; + Thread::CurrentPrincipal = gcnew GenericPrincipal( + gcnew GenericIdentity( "John" ), + rolesArray ); + try + { + DeclarativeSecurity(); + } + catch (SecurityException^) + { + Console::WriteLine("SECURITY ERROR in Declarative Security Function"); + } + + try + { + DemandSecurity(); + } + catch (SecurityException^) + { + Console::WriteLine("SECURITY ERROR in Demand Security Function"); + } +} diff --git a/Chapter19/RoleBasedSecurity/RoleBasedSecurity.vcproj b/Chapter19/RoleBasedSecurity/RoleBasedSecurity.vcproj new file mode 100644 index 0000000..cfaa98c --- /dev/null +++ b/Chapter19/RoleBasedSecurity/RoleBasedSecurity.vcproj @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter19/RoleBasedSecurity/app.ico b/Chapter19/RoleBasedSecurity/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Chapter19/RoleBasedSecurity/app.rc b/Chapter19/RoleBasedSecurity/app.rc new file mode 100644 index 0000000..807aa89 --- /dev/null +++ b/Chapter19/RoleBasedSecurity/app.rc @@ -0,0 +1,63 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon placed first or with lowest ID value becomes application icon + +LANGUAGE 9, 1 +#pragma code_page(1252) +1 ICON "app.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Chapter19/RoleBasedSecurity/resource.h b/Chapter19/RoleBasedSecurity/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter19/RoleBasedSecurity/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter19/RoleBasedSecurity/stdafx.cpp b/Chapter19/RoleBasedSecurity/stdafx.cpp new file mode 100644 index 0000000..5d6936d --- /dev/null +++ b/Chapter19/RoleBasedSecurity/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// RoleBasedSecurity.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter19/RoleBasedSecurity/stdafx.h b/Chapter19/RoleBasedSecurity/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter19/RoleBasedSecurity/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter19/SetSecurity/AssemblyInfo.cpp b/Chapter19/SetSecurity/AssemblyInfo.cpp new file mode 100644 index 0000000..50764ae --- /dev/null +++ b/Chapter19/SetSecurity/AssemblyInfo.cpp @@ -0,0 +1,61 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SetSecurity")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SetSecurity")]; +[assembly:AssemblyCopyrightAttribute("Copyright @ 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter19/SetSecurity/ReadMe.txt b/Chapter19/SetSecurity/ReadMe.txt new file mode 100644 index 0000000..ce0ef63 --- /dev/null +++ b/Chapter19/SetSecurity/ReadMe.txt @@ -0,0 +1,28 @@ +======================================================================== + APPLICATION : SetSecurity Project Overview +======================================================================== + +AppWizard has created this SetSecurity Application for you. + +This file contains a summary of what you will find in each of the files that +make up your SetSecurity application. + +SetSecurity.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +SetSecurity.cpp + This is the main application source file. + +AssemblyInfo.cpp + Contains custom attributes for modifying assembly metadata. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff --git a/Chapter19/SetSecurity/SetSecurity.cpp b/Chapter19/SetSecurity/SetSecurity.cpp new file mode 100644 index 0000000..4f9b03f --- /dev/null +++ b/Chapter19/SetSecurity/SetSecurity.cpp @@ -0,0 +1,47 @@ +using namespace System; +using namespace System::Security; +using namespace System::Security::Permissions; +using namespace System::Security::Policy; + +void main() +{ + // Create a new permission set + PermissionSet^ permSet = gcnew PermissionSet(PermissionState::None); + + // Add permissions to the permission set. + permSet->AddPermission( + gcnew SecurityPermission(PermissionState::Unrestricted)); + permSet->AddPermission(gcnew UIPermission(PermissionState::Unrestricted)); + permSet->AddPermission(gcnew FileIOPermission(FileIOPermissionAccess::Read, + "C:\\")); + + // Create Policy Statement + PolicyStatement^ policy = gcnew PolicyStatement(permSet); + + // Create Membership condition + IMembershipCondition^ membership = + gcnew UrlMembershipCondition("http://192.168.1.102/Chapter19/*"); + + // Create Code group + CodeGroup^ codeGroup = gcnew UnionCodeGroup(membership, policy); + codeGroup->Description = "C:\\ ReadOnly permission for Application URL"; + codeGroup->Name = "ReadOnly Secure Group"; + + // Find the machine policy level + System::Collections::IEnumerator^ ph = SecurityManager::PolicyHierarchy(); + + while( ph->MoveNext() ) + { + PolicyLevel^ pl = (PolicyLevel^)ph->Current; + if( pl->Label == "Machine" ) + { + // Add code group to Machine policy + pl->RootCodeGroup->AddChild(codeGroup); + break; + } + } + // Save changes + SecurityManager::SavePolicy(); + + Console::WriteLine("Added C:\\ ReadOnly Secure Group"); +} diff --git a/Chapter19/SetSecurity/SetSecurity.vcproj b/Chapter19/SetSecurity/SetSecurity.vcproj new file mode 100644 index 0000000..d1938f6 --- /dev/null +++ b/Chapter19/SetSecurity/SetSecurity.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter19/SetSecurity/app.ico b/Chapter19/SetSecurity/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Chapter19/SetSecurity/app.rc b/Chapter19/SetSecurity/app.rc new file mode 100644 index 0000000..6be44ad --- /dev/null +++ b/Chapter19/SetSecurity/app.rc @@ -0,0 +1,52 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon placed first or with lowest ID value becomes application icon + +LANGUAGE 9, 1 +#pragma code_page(1252) +1 ICON "app.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Chapter19/SetSecurity/resource.h b/Chapter19/SetSecurity/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/Chapter19/SetSecurity/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/Chapter19/SetSecurity/stdafx.cpp b/Chapter19/SetSecurity/stdafx.cpp new file mode 100644 index 0000000..4ecdf0e --- /dev/null +++ b/Chapter19/SetSecurity/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SetSecurity.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter19/SetSecurity/stdafx.h b/Chapter19/SetSecurity/stdafx.h new file mode 100644 index 0000000..5acdcf6 --- /dev/null +++ b/Chapter19/SetSecurity/stdafx.h @@ -0,0 +1,10 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +#include + +// TODO: reference additional headers your program requires here diff --git a/Chapter20/Chapter20.sln b/Chapter20/Chapter20.sln new file mode 100644 index 0000000..aedbef5 --- /dev/null +++ b/Chapter20/Chapter20.sln @@ -0,0 +1,68 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IntPtrArith", "IntPtrArith\IntPtrArith.vcproj", "{8A3B5612-376E-4B94-B591-3A1A9006428D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IntPtr", "IntPtrMoving\IntPtrMoving.vcproj", "{AD1044A0-4AEC-46D1-B0CC-3B17AA534A0F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MixManUnman", "MixManUnman\MixManUnman.vcproj", "{8F7C524D-7538-4402-8958-5A3077DBAD46}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PinPtr", "PinPtr\PinPtr.vcproj", "{B914BACA-F360-4BA9-A138-4CDDA4C9AC2E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PinIntPtr", "PinIntPtr\PinIntPtr.vcproj", "{1E5B45D2-4BCC-4BD8-8280-870C8052A422}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UMArray", "UMArray\UMArray.vcproj", "{673059DC-8799-42FA-8864-A150B1DC2CEC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MixManUnmanClass", "MixManUnmanClass\MixManUnmanClass.vcproj", "{4CF1A97E-2016-46CA-B5DC-86F7C2F25FA9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VcclrEx", "VcclrEx\VcclrEx.vcproj", "{DA1EDA92-3FD0-4224-A5EA-98B301906C36}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MixManUnmanHello", "MixManUnmanHello\MixManUnmanHello.vcproj", "{B587D523-95B3-400A-A4A3-3DE4664F677B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8A3B5612-376E-4B94-B591-3A1A9006428D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8A3B5612-376E-4B94-B591-3A1A9006428D}.Debug|Win32.Build.0 = Debug|Win32 + {8A3B5612-376E-4B94-B591-3A1A9006428D}.Release|Win32.ActiveCfg = Release|Win32 + {8A3B5612-376E-4B94-B591-3A1A9006428D}.Release|Win32.Build.0 = Release|Win32 + {AD1044A0-4AEC-46D1-B0CC-3B17AA534A0F}.Debug|Win32.ActiveCfg = Debug|Win32 + {AD1044A0-4AEC-46D1-B0CC-3B17AA534A0F}.Debug|Win32.Build.0 = Debug|Win32 + {AD1044A0-4AEC-46D1-B0CC-3B17AA534A0F}.Release|Win32.ActiveCfg = Release|Win32 + {AD1044A0-4AEC-46D1-B0CC-3B17AA534A0F}.Release|Win32.Build.0 = Release|Win32 + {8F7C524D-7538-4402-8958-5A3077DBAD46}.Debug|Win32.ActiveCfg = Debug|Win32 + {8F7C524D-7538-4402-8958-5A3077DBAD46}.Debug|Win32.Build.0 = Debug|Win32 + {8F7C524D-7538-4402-8958-5A3077DBAD46}.Release|Win32.ActiveCfg = Release|Win32 + {8F7C524D-7538-4402-8958-5A3077DBAD46}.Release|Win32.Build.0 = Release|Win32 + {B914BACA-F360-4BA9-A138-4CDDA4C9AC2E}.Debug|Win32.ActiveCfg = Debug|Win32 + {B914BACA-F360-4BA9-A138-4CDDA4C9AC2E}.Debug|Win32.Build.0 = Debug|Win32 + {B914BACA-F360-4BA9-A138-4CDDA4C9AC2E}.Release|Win32.ActiveCfg = Release|Win32 + {B914BACA-F360-4BA9-A138-4CDDA4C9AC2E}.Release|Win32.Build.0 = Release|Win32 + {1E5B45D2-4BCC-4BD8-8280-870C8052A422}.Debug|Win32.ActiveCfg = Debug|Win32 + {1E5B45D2-4BCC-4BD8-8280-870C8052A422}.Debug|Win32.Build.0 = Debug|Win32 + {1E5B45D2-4BCC-4BD8-8280-870C8052A422}.Release|Win32.ActiveCfg = Release|Win32 + {1E5B45D2-4BCC-4BD8-8280-870C8052A422}.Release|Win32.Build.0 = Release|Win32 + {673059DC-8799-42FA-8864-A150B1DC2CEC}.Debug|Win32.ActiveCfg = Debug|Win32 + {673059DC-8799-42FA-8864-A150B1DC2CEC}.Debug|Win32.Build.0 = Debug|Win32 + {673059DC-8799-42FA-8864-A150B1DC2CEC}.Release|Win32.ActiveCfg = Release|Win32 + {673059DC-8799-42FA-8864-A150B1DC2CEC}.Release|Win32.Build.0 = Release|Win32 + {4CF1A97E-2016-46CA-B5DC-86F7C2F25FA9}.Debug|Win32.ActiveCfg = Debug|Win32 + {4CF1A97E-2016-46CA-B5DC-86F7C2F25FA9}.Debug|Win32.Build.0 = Debug|Win32 + {4CF1A97E-2016-46CA-B5DC-86F7C2F25FA9}.Release|Win32.ActiveCfg = Release|Win32 + {4CF1A97E-2016-46CA-B5DC-86F7C2F25FA9}.Release|Win32.Build.0 = Release|Win32 + {DA1EDA92-3FD0-4224-A5EA-98B301906C36}.Debug|Win32.ActiveCfg = Debug|Win32 + {DA1EDA92-3FD0-4224-A5EA-98B301906C36}.Debug|Win32.Build.0 = Debug|Win32 + {DA1EDA92-3FD0-4224-A5EA-98B301906C36}.Release|Win32.ActiveCfg = Release|Win32 + {DA1EDA92-3FD0-4224-A5EA-98B301906C36}.Release|Win32.Build.0 = Release|Win32 + {B587D523-95B3-400A-A4A3-3DE4664F677B}.Debug|Win32.ActiveCfg = Debug|Win32 + {B587D523-95B3-400A-A4A3-3DE4664F677B}.Debug|Win32.Build.0 = Debug|Win32 + {B587D523-95B3-400A-A4A3-3DE4664F677B}.Release|Win32.ActiveCfg = Release|Win32 + {B587D523-95B3-400A-A4A3-3DE4664F677B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter20/Chapter20.suo b/Chapter20/Chapter20.suo new file mode 100644 index 0000000000000000000000000000000000000000..c013429deb908f69c0eb7a58c979577ef3cb72c7 GIT binary patch literal 23040 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 K{GW=Fz<&W=Ok5NI literal 0 HcmV?d00001 diff --git a/Chapter20/IntPtrArith/IntPtrArith.cpp b/Chapter20/IntPtrArith/IntPtrArith.cpp new file mode 100644 index 0000000..325553d --- /dev/null +++ b/Chapter20/IntPtrArith/IntPtrArith.cpp @@ -0,0 +1,18 @@ + +using namespace System; + +void main() +{ + array^ primes = gcnew array {1,2,3,5,7,11,13,17}; + + interior_ptr ip = &primes[0]; + + int total = 0; + while(ip != &primes[0] + primes->Length) + { + total += *ip; + ip++; + } + + Console::WriteLine("Sum of the first 8 prime numbers is {0}", total); +} diff --git a/Chapter20/IntPtrArith/IntPtrArith.vcproj b/Chapter20/IntPtrArith/IntPtrArith.vcproj new file mode 100644 index 0000000..89a5cce --- /dev/null +++ b/Chapter20/IntPtrArith/IntPtrArith.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter20/IntPtrMoving/IntPtr.cpp b/Chapter20/IntPtrMoving/IntPtr.cpp new file mode 100644 index 0000000..3fea8aa --- /dev/null +++ b/Chapter20/IntPtrMoving/IntPtr.cpp @@ -0,0 +1,26 @@ +using namespace System; + +ref class Point +{ +public: + int X; +}; + +void main() +{ + Point ^p = gcnew Point(); + + interior_ptr ip1 = &p; // pointer to Point + + (*ip1)->X = 1; + + Console::WriteLine("(&ip1)={0:X}\tp->X={1}\t(*ip1)->X={2}", + (int)&ip1, p->X, (*ip1)->X); + + interior_ptr ip2 = &p->X; // pointer to Member variable X + + *ip2 += (*ip1)->X; + + Console::WriteLine("(&ip2)={0:X}\t*ip2={1}", + (int)&ip2, *ip2); +} diff --git a/Chapter20/IntPtrMoving/IntPtrMoving.vcproj b/Chapter20/IntPtrMoving/IntPtrMoving.vcproj new file mode 100644 index 0000000..d50f1af --- /dev/null +++ b/Chapter20/IntPtrMoving/IntPtrMoving.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter20/MixManUnman/MixManUnman.cpp b/Chapter20/MixManUnman/MixManUnman.cpp new file mode 100644 index 0000000..e251151 --- /dev/null +++ b/Chapter20/MixManUnman/MixManUnman.cpp @@ -0,0 +1,21 @@ +using namespace System; + +#pragma unmanaged + +int UMadd(int a, int b) +{ + return a + b; +} + +#pragma managed + +int Madd(int a, int b) +{ + return a + b; +} + +void main() +{ + Console::WriteLine("Unmanaged Add 2 + 2: {0}", UMadd(2, 2)); + Console::WriteLine("Managed Add 3 + 3: {0}", Madd(3, 3)); +} diff --git a/Chapter20/MixManUnman/MixManUnman.vcproj b/Chapter20/MixManUnman/MixManUnman.vcproj new file mode 100644 index 0000000..d1060cd --- /dev/null +++ b/Chapter20/MixManUnman/MixManUnman.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter20/MixManUnmanClass/MixManUnmanClass.cpp b/Chapter20/MixManUnmanClass/MixManUnmanClass.cpp new file mode 100644 index 0000000..f7c9e29 --- /dev/null +++ b/Chapter20/MixManUnmanClass/MixManUnmanClass.cpp @@ -0,0 +1,105 @@ +using namespace System; + +class ClassMember {}; +ref class RefClassMember {}; +value class ValueClassMember {}; + +class Class +{ +public: +// RefClassMember rc; // can't embed instance ref class +// RefClassMember ^hrc; // can't embed handle to ref class + ValueClassMember vc; +// ValueClassMember ^hvc; // can't embed managed value class + ValueClassMember *pvc; + ClassMember c; + ClassMember *pc; + + int x; + void write() { Console::WriteLine("Class x: {0}", x); } +}; + +ref class RefClass +{ +public: + RefClassMember rc; + RefClassMember ^hrc; + ValueClassMember vc; + ValueClassMember ^hvc; + ValueClassMember *pvc; +// ClassMember c; // can't embed instance of class + ClassMember *pc; + + int x; + void write() { Console::WriteLine("RefClass x: {0}", x); } +}; + +value class ValueClass +{ +public: +// RefClassMember rc; // can't embed instance ref class + RefClassMember ^hrc; + ValueClassMember vc; + ValueClassMember ^hvc; + ValueClassMember *pvc; +// ClassMember c; // can't embed instance of class + ClassMember *pc; + + int x; + void write() { Console::WriteLine("ValueClass x: {0}", x); } +}; + +class ClassChildClassParent : public Class {}; // OK +//class ClassChildRefClassParent : public RefClass {}; // Error +//class ClassChildValueClassParent : public ValueClass {}; // Error + +//ref class RefClassChildClassParent : public Class {}; // Error +ref class RefClassChildRefClassParent : public RefClass {}; // OK +//ref class RefClassChildValueClassParent : public ValueClass {}; // Error + +//value class ValueClassChildClassParent : public Class {}; // Error +//value class ValueClassChildRefClassParent : public RefClass {}; // Error +//value class ValueClassChildValueClassParent : public ValueClass {}; // Error + +void main() +{ + // Stack + Class _class; + RefClass refclass; // Not really on the stack + ValueClass valueclass; + + // Handle +// Class ^hclass = gcnew Class(); // Not allowed + RefClass ^hrefclass = gcnew RefClass(); + ValueClass ^hvalueclass = gcnew ValueClass(); + + // Pointer + Class *pclass = new Class(); +// RefClass *prefclass = new RefClass(); // Not allowed + ValueClass *pvalueclass = &valueclass; + + // Reference + Class &rfclass = *new Class(); +// RefClass &rfrefclass = *gcnew RefClass(); // Not allowed + ValueClass &rfvalueclass = valueclass; + + _class.x = 1; + refclass.x = 2; + valueclass.x = 3; + hrefclass->x = 4; + hvalueclass->x = 5; + pclass->x = 6; + pvalueclass->x = 7; + rfclass.x = 8; + rfvalueclass.x = 9; + + _class.write(); // prints 1 + refclass.write(); // prints 2 + valueclass.write(); // prints 9 + hrefclass->write(); // prints 4 + hvalueclass->write(); // prints 5 + pclass->write(); // prints 6 + pvalueclass->write(); // prints 9 + rfclass.write(); // prints 8 + rfvalueclass.write(); // prints 9 +} diff --git a/Chapter20/MixManUnmanClass/MixManUnmanClass.vcproj b/Chapter20/MixManUnmanClass/MixManUnmanClass.vcproj new file mode 100644 index 0000000..ab4ea97 --- /dev/null +++ b/Chapter20/MixManUnmanClass/MixManUnmanClass.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter20/MixManUnmanHello/MixManUnmanHello.cpp b/Chapter20/MixManUnmanHello/MixManUnmanHello.cpp new file mode 100644 index 0000000..97d3942 --- /dev/null +++ b/Chapter20/MixManUnmanHello/MixManUnmanHello.cpp @@ -0,0 +1,13 @@ +#include "stdio.h" +#include "vcclr.h" + +using namespace System; + +void main() +{ + String ^hstr = "Hello World!"; + + pin_ptr pstr = PtrToStringChars(hstr); + + wprintf(pstr); +} diff --git a/Chapter20/MixManUnmanHello/MixManUnmanHello.vcproj b/Chapter20/MixManUnmanHello/MixManUnmanHello.vcproj new file mode 100644 index 0000000..4dcd2ae --- /dev/null +++ b/Chapter20/MixManUnmanHello/MixManUnmanHello.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter20/PinIntPtr/PinIntPtr.cpp b/Chapter20/PinIntPtr/PinIntPtr.cpp new file mode 100644 index 0000000..4a7ec65 --- /dev/null +++ b/Chapter20/PinIntPtr/PinIntPtr.cpp @@ -0,0 +1,32 @@ +using namespace System; + +value class Test +{ +public: + int i; +}; + +#pragma unmanaged + +void incr (int *i) +{ + (*i) += 10; +} + +#pragma managed + +void main () +{ + Test ^test = gcnew Test(); + interior_ptr ip = &test->i; + (*ip) = 5; + +// incr( ip ); // invalid + + pin_ptr i = ip; // i is a pinned int pointer + + incr( i ); // pinned pointer to interior pointer passed to a + // native function call expecting a native pointer + + Console::WriteLine ( test->i ); +} diff --git a/Chapter20/PinIntPtr/PinIntPtr.vcproj b/Chapter20/PinIntPtr/PinIntPtr.vcproj new file mode 100644 index 0000000..8073f07 --- /dev/null +++ b/Chapter20/PinIntPtr/PinIntPtr.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter20/PinPtr/PinPtr.cpp b/Chapter20/PinPtr/PinPtr.cpp new file mode 100644 index 0000000..c053a7e --- /dev/null +++ b/Chapter20/PinPtr/PinPtr.cpp @@ -0,0 +1,69 @@ +#include + +using namespace System; + +ref class RTest +{ +public: + int i; + RTest() + { + i = 0; + } +}; + +value class VTest +{ +public: + int i; +}; + +#pragma unmanaged + +void incr (int *i) +{ + (*i) += 10; +} + +#pragma managed + +void incr (VTest *t) +{ + t->i += 20; +} + + + +void main () +{ + RTest ^rtest = gcnew RTest(); // rtest is a reference type + + pin_ptr i = &(rtest->i); // i is a pinned int pointer + + incr( i ); // pointer to managed data passed as + // parameter of unmanaged function call + + Console::WriteLine ( rtest->i ); + + + VTest ^vtest = gcnew VTest; // vtest is a boxed value type + vtest->i = 0; + + pin_ptr ptest = &*vtest; // ptest is a pinned value type. + // the &* says give the address of the + // inderection of vtest + + incr( ptest ); // pointer to value type passed as + // parameter of unmanaged function call + + Console::WriteLine ( vtest->i ); + + + array^ arr = gcnew array {'M', 'C', '+', '+'}; + + pin_ptr p = &arr[1]; // ENTIRE array is pinned + unsigned char *cp = p; + printf("%s\n", --cp); // cp bytes will not move during call + // notice the negative pointer arithmetic + // into the array. +} diff --git a/Chapter20/PinPtr/PinPtr.vcproj b/Chapter20/PinPtr/PinPtr.vcproj new file mode 100644 index 0000000..0a03c63 --- /dev/null +++ b/Chapter20/PinPtr/PinPtr.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter20/UMArray/UMArray.cpp b/Chapter20/UMArray/UMArray.cpp new file mode 100644 index 0000000..2ff739c --- /dev/null +++ b/Chapter20/UMArray/UMArray.cpp @@ -0,0 +1,12 @@ +using namespace System; + +void main() +{ + int UMarray[5] = {2, 3, 5, 7, 11}; + + for (int i = 0; i < 5; i++) + { + Console::Write("{0} ", UMarray[i]); + } + Console::WriteLine(" -- End of array"); +} diff --git a/Chapter20/UMArray/UMArray.vcproj b/Chapter20/UMArray/UMArray.vcproj new file mode 100644 index 0000000..46f772d --- /dev/null +++ b/Chapter20/UMArray/UMArray.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter20/VcclrEx/VcclrEx.cpp b/Chapter20/VcclrEx/VcclrEx.cpp new file mode 100644 index 0000000..8c67b84 --- /dev/null +++ b/Chapter20/VcclrEx/VcclrEx.cpp @@ -0,0 +1,37 @@ +#include "stdio.h" +#include "vcclr.h" + +using namespace System; + +ref class MClass +{ +public: + int x; + ~MClass() { Console::WriteLine("MClass disposed"); } +protected: + !MClass() { Console::WriteLine("MClass finalized"); } +}; + +#pragma unmanaged // works with or without this line + +class UMClass +{ +public: + gcroot mclass; + + ~UMClass() { printf("UMClass deleted\n"); } +}; + +#pragma managed + +void main() +{ + UMClass *umc = new UMClass(); + umc->mclass = gcnew MClass(); + + umc->mclass->x = 4; + Console::WriteLine("Managed Print {0}", umc->mclass->x); + printf("Unmanaged Print %d\n", umc->mclass->x); + + delete umc; +} diff --git a/Chapter20/VcclrEx/VcclrEx.vcproj b/Chapter20/VcclrEx/VcclrEx.vcproj new file mode 100644 index 0000000..2dec32e --- /dev/null +++ b/Chapter20/VcclrEx/VcclrEx.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/Chapter21.sln b/Chapter21/Chapter21.sln new file mode 100644 index 0000000..000e4f8 --- /dev/null +++ b/Chapter21/Chapter21.sln @@ -0,0 +1,68 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NativeCode", "NativeCode\NativeCode.vcproj", "{9C938A36-2BB3-4820-B782-924883D27940}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimplePInvoke", "SimplePInvoke\SimplePInvoke.vcproj", "{A1BFB470-2C46-491A-BD81-D4A943053137}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DllOldWay", "DllOldWay\DllOldWay.vcproj", "{2CDFEB2C-17C0-4CCE-91BB-2BC16468C48A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StaticMethodPInvoke", "StaticMethodPInvoke\StaticMethodPInvoke.vcproj", "{1C2313CB-B629-4781-A41D-A19C98C1A42A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ManualCOM", "ManualCom\ManualCom.vcproj", "{8BAA222C-D5C0-4F6A-95C5-CDD1391B86E3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LateBindCOM", "LateBindCOM\LateBindCOM.vcproj", "{B8D18C75-FA37-4FDC-A81B-1BC0396C5CBA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimpleCOM", "SimpleCOM\SimpleCOM.vcproj", "{2191D55A-4697-4176-9671-43F2C6B789A5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestCOM", "TestCOM\TestCOM.vcproj", "{A86485E0-93D2-4C26-9F05-C06910FABBB3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ClassMarshal", "ClassMarshal\ClassMarshal.vcproj", "{1C689598-F9B1-49C4-AD76-CCF553984CC5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9C938A36-2BB3-4820-B782-924883D27940}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C938A36-2BB3-4820-B782-924883D27940}.Debug|Win32.Build.0 = Debug|Win32 + {9C938A36-2BB3-4820-B782-924883D27940}.Release|Win32.ActiveCfg = Release|Win32 + {9C938A36-2BB3-4820-B782-924883D27940}.Release|Win32.Build.0 = Release|Win32 + {A1BFB470-2C46-491A-BD81-D4A943053137}.Debug|Win32.ActiveCfg = Debug|Win32 + {A1BFB470-2C46-491A-BD81-D4A943053137}.Debug|Win32.Build.0 = Debug|Win32 + {A1BFB470-2C46-491A-BD81-D4A943053137}.Release|Win32.ActiveCfg = Release|Win32 + {A1BFB470-2C46-491A-BD81-D4A943053137}.Release|Win32.Build.0 = Release|Win32 + {2CDFEB2C-17C0-4CCE-91BB-2BC16468C48A}.Debug|Win32.ActiveCfg = Debug|Win32 + {2CDFEB2C-17C0-4CCE-91BB-2BC16468C48A}.Debug|Win32.Build.0 = Debug|Win32 + {2CDFEB2C-17C0-4CCE-91BB-2BC16468C48A}.Release|Win32.ActiveCfg = Release|Win32 + {2CDFEB2C-17C0-4CCE-91BB-2BC16468C48A}.Release|Win32.Build.0 = Release|Win32 + {1C2313CB-B629-4781-A41D-A19C98C1A42A}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C2313CB-B629-4781-A41D-A19C98C1A42A}.Debug|Win32.Build.0 = Debug|Win32 + {1C2313CB-B629-4781-A41D-A19C98C1A42A}.Release|Win32.ActiveCfg = Release|Win32 + {1C2313CB-B629-4781-A41D-A19C98C1A42A}.Release|Win32.Build.0 = Release|Win32 + {8BAA222C-D5C0-4F6A-95C5-CDD1391B86E3}.Debug|Win32.ActiveCfg = Debug|Win32 + {8BAA222C-D5C0-4F6A-95C5-CDD1391B86E3}.Debug|Win32.Build.0 = Debug|Win32 + {8BAA222C-D5C0-4F6A-95C5-CDD1391B86E3}.Release|Win32.ActiveCfg = Release|Win32 + {8BAA222C-D5C0-4F6A-95C5-CDD1391B86E3}.Release|Win32.Build.0 = Release|Win32 + {B8D18C75-FA37-4FDC-A81B-1BC0396C5CBA}.Debug|Win32.ActiveCfg = Debug|Win32 + {B8D18C75-FA37-4FDC-A81B-1BC0396C5CBA}.Debug|Win32.Build.0 = Debug|Win32 + {B8D18C75-FA37-4FDC-A81B-1BC0396C5CBA}.Release|Win32.ActiveCfg = Release|Win32 + {B8D18C75-FA37-4FDC-A81B-1BC0396C5CBA}.Release|Win32.Build.0 = Release|Win32 + {2191D55A-4697-4176-9671-43F2C6B789A5}.Debug|Win32.ActiveCfg = Debug|Win32 + {2191D55A-4697-4176-9671-43F2C6B789A5}.Debug|Win32.Build.0 = Debug|Win32 + {2191D55A-4697-4176-9671-43F2C6B789A5}.Release|Win32.ActiveCfg = Release|Win32 + {2191D55A-4697-4176-9671-43F2C6B789A5}.Release|Win32.Build.0 = Release|Win32 + {A86485E0-93D2-4C26-9F05-C06910FABBB3}.Debug|Win32.ActiveCfg = Debug|Win32 + {A86485E0-93D2-4C26-9F05-C06910FABBB3}.Debug|Win32.Build.0 = Debug|Win32 + {A86485E0-93D2-4C26-9F05-C06910FABBB3}.Release|Win32.ActiveCfg = Release|Win32 + {A86485E0-93D2-4C26-9F05-C06910FABBB3}.Release|Win32.Build.0 = Release|Win32 + {1C689598-F9B1-49C4-AD76-CCF553984CC5}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C689598-F9B1-49C4-AD76-CCF553984CC5}.Debug|Win32.Build.0 = Debug|Win32 + {1C689598-F9B1-49C4-AD76-CCF553984CC5}.Release|Win32.ActiveCfg = Release|Win32 + {1C689598-F9B1-49C4-AD76-CCF553984CC5}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter21/Chapter21.suo b/Chapter21/Chapter21.suo new file mode 100644 index 0000000000000000000000000000000000000000..4280eed8735a38564addc9145452e3b07d2176a9 GIT binary patch literal 28672 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 B04D$d literal 0 HcmV?d00001 diff --git a/Chapter21/ClassMarshal/AssemblyInfo.cpp b/Chapter21/ClassMarshal/AssemblyInfo.cpp new file mode 100644 index 0000000..48e0a5b --- /dev/null +++ b/Chapter21/ClassMarshal/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("ClassMarshal")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("ClassMarshal")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter21/ClassMarshal/ClassMarshal.cpp b/Chapter21/ClassMarshal/ClassMarshal.cpp new file mode 100644 index 0000000..8a05e90 --- /dev/null +++ b/Chapter21/ClassMarshal/ClassMarshal.cpp @@ -0,0 +1,53 @@ +// ClassMarshal.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace System::Runtime::InteropServices; + +[StructLayout(LayoutKind::Sequential)] +ref class rRec +{ +public: + int width; + int height; + + rRec(int iwidth, int iheight) + { + width = iwidth; + height = iheight; + } +}; + +[StructLayout(LayoutKind::Sequential)] +value class vRec +{ +public: + int width; + int height; + + vRec(int iwidth, int iheight) + { + width = iwidth; + height = iheight; + } +}; + +// By value +[DllImportAttribute("NativeCode.dll")] +extern "C" bool vIsSquare(vRec rec); + +// by reference +[DllImportAttribute("NativeCode.dll")] +extern "C" bool rIsSquare(rRec^ rec); + +void main() +{ + // By Value + vRec vrec(3,3); + Console::WriteLine("value rec a square? {0}", vIsSquare(vrec)); + + // By Reference + rRec ^rrec = gcnew rRec(2,3); + Console::WriteLine("ref rec a square? {0}", rIsSquare(rrec)); +} diff --git a/Chapter21/ClassMarshal/ClassMarshal.vcproj b/Chapter21/ClassMarshal/ClassMarshal.vcproj new file mode 100644 index 0000000..ed9a60f --- /dev/null +++ b/Chapter21/ClassMarshal/ClassMarshal.vcproj @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/ClassMarshal/stdafx.cpp b/Chapter21/ClassMarshal/stdafx.cpp new file mode 100644 index 0000000..4f8901c --- /dev/null +++ b/Chapter21/ClassMarshal/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// ClassMarshal.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter21/ClassMarshal/stdafx.h b/Chapter21/ClassMarshal/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter21/ClassMarshal/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter21/DllOldWay/AssemblyInfo.cpp b/Chapter21/DllOldWay/AssemblyInfo.cpp new file mode 100644 index 0000000..1486dc6 --- /dev/null +++ b/Chapter21/DllOldWay/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("DllOldWay")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("DllOldWay")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter21/DllOldWay/DllOldWay.cpp b/Chapter21/DllOldWay/DllOldWay.cpp new file mode 100644 index 0000000..870f447 --- /dev/null +++ b/Chapter21/DllOldWay/DllOldWay.cpp @@ -0,0 +1,19 @@ +// DllOldWay.cpp : main project file. + +#include "stdafx.h" +#include "windows.h" + +extern "C" __declspec(dllimport) long square(long value); + +using namespace System; + +int main(array ^args) +{ + long Squareof4 = square(4); + + Console::WriteLine(L"The square of 4 is {0}", Squareof4); + + MessageBox(0, L"Hello World!", L"A Message Box", 0); + + return 0; +} diff --git a/Chapter21/DllOldWay/DllOldWay.vcproj b/Chapter21/DllOldWay/DllOldWay.vcproj new file mode 100644 index 0000000..2e5438e --- /dev/null +++ b/Chapter21/DllOldWay/DllOldWay.vcproj @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/DllOldWay/stdafx.cpp b/Chapter21/DllOldWay/stdafx.cpp new file mode 100644 index 0000000..8386c43 --- /dev/null +++ b/Chapter21/DllOldWay/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// DllOldWay.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter21/DllOldWay/stdafx.h b/Chapter21/DllOldWay/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter21/DllOldWay/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter21/LateBindCOM/AssemblyInfo.cpp b/Chapter21/LateBindCOM/AssemblyInfo.cpp new file mode 100644 index 0000000..f61584d --- /dev/null +++ b/Chapter21/LateBindCOM/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("LateBindCOM")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("LateBindCOM")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter21/LateBindCOM/LateBindCOM.cpp b/Chapter21/LateBindCOM/LateBindCOM.cpp new file mode 100644 index 0000000..30dfb37 --- /dev/null +++ b/Chapter21/LateBindCOM/LateBindCOM.cpp @@ -0,0 +1,39 @@ +// LateBindCOM.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; + +int main(array ^args) +{ + Type ^typeTestCom = Type::GetTypeFromProgID(L"CTestCOM.CTestCOM"); + + if (typeTestCom == nullptr) + { + Console::WriteLine("Getting CTestCOM.CTestCOM failed"); + return -1; + } + + try + { + Object ^TestComLBnd = Activator::CreateInstance(typeTestCom); + + array^ param = gcnew array { 4 }; + + Object ^ret = typeTestCom->InvokeMember( + L"Square", + Reflection::BindingFlags::InvokeMethod, + nullptr, + TestComLBnd, + param); + + Console::WriteLine("Square of 4 is {0}", ret); + } + catch (Exception ^ex) + { + Console::WriteLine("Error when invoking Square method: {0}", + ex->Message); + } + return 0; +} diff --git a/Chapter21/LateBindCOM/LateBindCOM.vcproj b/Chapter21/LateBindCOM/LateBindCOM.vcproj new file mode 100644 index 0000000..d92c647 --- /dev/null +++ b/Chapter21/LateBindCOM/LateBindCOM.vcproj @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/LateBindCOM/stdafx.cpp b/Chapter21/LateBindCOM/stdafx.cpp new file mode 100644 index 0000000..fb65f2f --- /dev/null +++ b/Chapter21/LateBindCOM/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// LateBindCOM.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter21/LateBindCOM/stdafx.h b/Chapter21/LateBindCOM/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter21/LateBindCOM/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter21/ManualCom/ManualCOM.cpp b/Chapter21/ManualCom/ManualCOM.cpp new file mode 100644 index 0000000..13a2ffa --- /dev/null +++ b/Chapter21/ManualCom/ManualCOM.cpp @@ -0,0 +1,17 @@ +// Compile from command line using +// cl /clr:safe ManualCOM + +#using + +using namespace System; +using namespace TestCOM; + +int main(array ^args) +{ + CTestCOMClass^ test = gcnew CTestCOMClass(); + + long ret = test->Square(4); + + Console::WriteLine("The Square of 4 is {0}", ret); + return 0; +} diff --git a/Chapter21/ManualCom/ManualCom.vcproj b/Chapter21/ManualCom/ManualCom.vcproj new file mode 100644 index 0000000..16bf872 --- /dev/null +++ b/Chapter21/ManualCom/ManualCom.vcproj @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/ManualCom/TestCom.dll b/Chapter21/ManualCom/TestCom.dll new file mode 100644 index 0000000000000000000000000000000000000000..e889410bf4ec183e9154a1fcefcf9735087ed3b8 GIT binary patch literal 3584 zcmeHJ&2Jl35dW?1q;5l_ln7`Gh^-RT7HYHpOf3-jGmTL~qB?{Mff|2o(*@gW*6WIJ zfJnfh;?gsmD)mMW94b*jNSu&3w0{EX0XT4>f*Xf~-@Nt4cBm@E4bgGlyqS5wnKv{0 z_HCA4zk(ou5Xa6AaFer8R`L6@EiO+!_4Oof?7wyFrnY$N*y=^At9KlG!>P9PdbQoQ zUA<=NPOq(7ZN0c$(OY)Ij2=9AV74E6r35T$LHxRNJMZsy2b0Gpv@kGEiwx3_;-GV6 zIfUt)0$$#fRQ@t!i-UF{*2S`>)Zbw4s~!X&G45+3XMqK2#9mql9@=aBC%O)>f?Wzz zU)a@vsB6CKQvZn=s#>JZe%?Mz2iBub*QwK>a?4T>{BU5ZG-soZ*|Z5%xvtYFvGycR zT%Ohu`i}JrNp1m*VMPa$+(Q%Nzo2~O<-FGSmhCUaqee7kq>Y#a3t^r78iUWgPmMY1 zB3E3;YHxG}G0SJbCx)3bua=9Plhh^LOulK?C<@VS>da#Z>=)%vErCb9d_|Y`hzl`l z-p5(;kb3+99MVLV!}UB{GLACOz&I``{)w_&QSw#Azf$}M#eX3e^8BSzjp-i1VfIe6 ztJHLAf(R<@@@bqSpWxcMve)rAE~8G% zd3?y#8{{Gf*wJx>w)~1&f+DFn?Yl2tbu zeY0aOS~ZylKBA#utNjO7r7Hgm)%p;+XmvZ~p&iSuj_tT+W8Se_{qTbzeZ!jRbS=9* zut)2z?V$2buj-gst2TS4UwE|9Y)X^PS!0{mpEOnMf`j%SBQpBUVc0 zPsdYp8J=!UJtA?KH|C4+M6MJmv zk4|Cs7eK+0=wSz!#wv2Gy98 zOO!?X#yujPQWygU<`~;R5;bz*3BFbuZ%-R7{!Dti+{HV#vqNhgwf`ootty=Ct#h1G z7(eqOBXoK5N*-vEHcOCc(tuk@y literal 0 HcmV?d00001 diff --git a/Chapter21/NativeCode/NativeCode.cpp b/Chapter21/NativeCode/NativeCode.cpp new file mode 100644 index 0000000..57f8dc7 --- /dev/null +++ b/Chapter21/NativeCode/NativeCode.cpp @@ -0,0 +1,30 @@ +#include "stdafx.h" +#include "string.h" +#include "stdio.h" +#include + +extern "C" __declspec(dllexport) long square(long value) +{ + return value * value; +} + +extern "C" +{ + struct Rec + { + int width; + int height; + }; + + // By reference + __declspec(dllexport) bool rIsSquare(Rec *rec) + { + return rec->width == rec->height; + } + + // By value + __declspec(dllexport) bool vIsSquare(Rec rec) + { + return rec.width == rec.height; + } +} \ No newline at end of file diff --git a/Chapter21/NativeCode/NativeCode.vcproj b/Chapter21/NativeCode/NativeCode.vcproj new file mode 100644 index 0000000..dfdbd22 --- /dev/null +++ b/Chapter21/NativeCode/NativeCode.vcproj @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/NativeCode/stdafx.cpp b/Chapter21/NativeCode/stdafx.cpp new file mode 100644 index 0000000..a812c10 --- /dev/null +++ b/Chapter21/NativeCode/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// NativeCode.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/Chapter21/NativeCode/stdafx.h b/Chapter21/NativeCode/stdafx.h new file mode 100644 index 0000000..c3afe5b --- /dev/null +++ b/Chapter21/NativeCode/stdafx.h @@ -0,0 +1,32 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. +#ifndef WINVER // Allow use of features specific to Windows XP or later. +#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. +#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. +#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. +#endif + +#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. +#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. +#endif + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files: +#include + + + +// TODO: reference additional headers your program requires here diff --git a/Chapter21/SimpleCOM/AssemblyInfo.cpp b/Chapter21/SimpleCOM/AssemblyInfo.cpp new file mode 100644 index 0000000..4ca017e --- /dev/null +++ b/Chapter21/SimpleCOM/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SimpleCOM")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SimpleCOM")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter21/SimpleCOM/Interop/Interop.TestCOM.1.0.dll b/Chapter21/SimpleCOM/Interop/Interop.TestCOM.1.0.dll new file mode 100644 index 0000000000000000000000000000000000000000..c876da94a8a9b5206aeba268c7fac0edb23c0142 GIT binary patch literal 3584 zcmeHJO>7%g5dPM7(zI!#l=9O;5nCmtRN!U(n^;BQ-?T;vsp=3aRH^aLHeIm2X1%VO z9>5Z(ic62&P*G1*NE|9rKuDaBI8^G1BkBb%NPrM04hi2pdt=8`72#6+tu5d-XQ8y>4`y91Pd)SH6mIRlbL6(Rc<0EpU;V(D(DsoPCGzg*HAPR%m*?b|ck4}H1-ENVgAIB_@Y?{*JUM<%riV4M~iq+i5A z=SXu1(>Votc~esP%Zx4u?Lw@JWlgKU!Q5AS5PZnEC6Uv>Wog7HtpR&SZU02q0amb0 z6Vy*_Yk=Wdmp$r#Fhf;~)Y;G5hv~qY;kMl>4Jx-Z1;Gyorb=_#aILySpvrZPMu|0& zIB{88chFtdFC@7IFox4QW$vMg@n2B3^lDb?d&~BhqK0WC%%mBSU?HrL-(c{Wcd0SQ zxX2~XwVUg0LCo_Ecw(42`Fb(W`4n{tHkZICUV5xAU}Y!(s56kz29aUT%3QS1-5Q=quY+ z6n#shU3J{LUBPnYEvxFGw9)pg22OVDTE^qUQR#SA-)NlaG(Edv8O5e&xlXHOxtHv! z#poL?YtgRAH1H7(IY;e3uqsvgUnp0H(0RMvDh};fY_uHLvuX>j)98mE1nC=AEw^nu z&4JyhdX9_IJDsv?VYOWESm>u}^vg9OhUquMsMYJzxb)VUPp&+Bc=^-r&7b#v^!>+} z`25Pb)kE=nSA#mVkgiQkkZDuG#>dDW*)QV6m>%HLaSgNcbIDvRRxrcyOd=YN%_URe zOfr%QCkkey5YNs>6LTp(@tQg|aab@H^3hnP5YAuitZ(}Fk|;ljtc&z_^6#&~%K4n*=IiyPvfYGwt}M%MGPaIFPY<9E zrI8M3>h9(3)!n(!I~wyocEQQF<7}EoBo}X=^kAIQD!;Ag$qP6`sfcB~M!iVBKw0SP z(65`lyTw2J-u#MM?cL|Y_l%hH92%pR;WCbmI{1pAi3@O)*R1*qtZ=nVYn$t3c*Hr> zgxh{T#DHYb~|^ z2CFSA9G4a51%>f5&oe@sH?QQ;+L5QkGx@RCwsTu0)+KsSON2MLxjp189wlD7;VEpB zd)J3D7_2zl&A^J<-D5S&SfbvG2Yx}M#zn5Ks|ZqU3mYoSbzEfh;aUc`Ue{~%YtYZd z+p04?>{))bH0~pnuB)y~ZhjvmQ|Ts#vVTyH25R({%d?9Y8TT~fI<$4zOK+%R@VnUN zPco_yzri!GDYuArRhMeCTu|N(N*)m{qIF_zddO4cDz9TB-8#m83B}bJ?c9I#q(;w4 VIsO-z-uwUPH+fwj(*Ldle*rrvf8PKA literal 0 HcmV?d00001 diff --git a/Chapter21/SimpleCOM/SimpleCOM.cpp b/Chapter21/SimpleCOM/SimpleCOM.cpp new file mode 100644 index 0000000..dce1362 --- /dev/null +++ b/Chapter21/SimpleCOM/SimpleCOM.cpp @@ -0,0 +1,27 @@ +// SimpleCOM.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace TestCOM; + + +int main(array ^args) +{ + CTestCOMClass^ test = gcnew CTestCOMClass(); + + try + { + long ret = test->Square(4); + + Console::WriteLine("The Square of 4 is {0}", ret); + } + catch (Exception^ ex) + { + Console::WriteLine("Oops an exception occurred: {0}", ex->Message); + } + + Console::WriteLine(System::Runtime::InteropServices::Marshal::ReleaseComObject(test)); + + return 0; +} diff --git a/Chapter21/SimpleCOM/SimpleCOM.vcproj b/Chapter21/SimpleCOM/SimpleCOM.vcproj new file mode 100644 index 0000000..62e21c8 --- /dev/null +++ b/Chapter21/SimpleCOM/SimpleCOM.vcproj @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/SimpleCOM/stdafx.cpp b/Chapter21/SimpleCOM/stdafx.cpp new file mode 100644 index 0000000..ba293d2 --- /dev/null +++ b/Chapter21/SimpleCOM/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SimpleCOM.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter21/SimpleCOM/stdafx.h b/Chapter21/SimpleCOM/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter21/SimpleCOM/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter21/SimplePInvoke/AssemblyInfo.cpp b/Chapter21/SimplePInvoke/AssemblyInfo.cpp new file mode 100644 index 0000000..626c3e6 --- /dev/null +++ b/Chapter21/SimplePInvoke/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("SimplePInvoke")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("SimplePInvoke")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter21/SimplePInvoke/SimplePInvoke.cpp b/Chapter21/SimplePInvoke/SimplePInvoke.cpp new file mode 100644 index 0000000..faf3d96 --- /dev/null +++ b/Chapter21/SimplePInvoke/SimplePInvoke.cpp @@ -0,0 +1,37 @@ +// SimplePInvoke.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace System::Text; +using namespace System::Runtime::InteropServices; + +[DllImportAttribute("C:\\Chapter21\\Debug\\NativeCode.dll", + CallingConvention=CallingConvention::StdCall)] +extern "C" long square(long value); + +[DllImport("User32.dll", CharSet=CharSet::Auto, + CallingConvention=CallingConvention::StdCall)] +extern "C" int MessageBox(int hWnd, String^ text, String^ caption, + unsigned int type); + +[DllImport("msvcr70", CharSet=CharSet::Ansi)] +extern "C" int strcpy([MarshalAs(UnmanagedType::LPStr)] StringBuilder^ dest, + [MarshalAs(UnmanagedType::LPStr)] String^ source); + +int main(array ^args) +{ + long Squareof4 = square(4); + + Console::WriteLine(L"The square of 4 is {0}", Squareof4); + + MessageBox(0, L"Hello World!", L"A Message Box", 0); + + StringBuilder^ dest = gcnew StringBuilder(); + String^ source = "Hello"; + strcpy(dest, source); + Console::WriteLine(dest); + + return 0; +} + diff --git a/Chapter21/SimplePInvoke/SimplePInvoke.vcproj b/Chapter21/SimplePInvoke/SimplePInvoke.vcproj new file mode 100644 index 0000000..fff6c62 --- /dev/null +++ b/Chapter21/SimplePInvoke/SimplePInvoke.vcproj @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/SimplePInvoke/stdafx.cpp b/Chapter21/SimplePInvoke/stdafx.cpp new file mode 100644 index 0000000..c93bf0c --- /dev/null +++ b/Chapter21/SimplePInvoke/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// SimplePInvoke.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter21/SimplePInvoke/stdafx.h b/Chapter21/SimplePInvoke/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter21/SimplePInvoke/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter21/StaticMethodPInvoke/AssemblyInfo.cpp b/Chapter21/StaticMethodPInvoke/AssemblyInfo.cpp new file mode 100644 index 0000000..b27550d --- /dev/null +++ b/Chapter21/StaticMethodPInvoke/AssemblyInfo.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("StaticMethodPInvoke")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("StaticMethodPInvoke")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2005")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + diff --git a/Chapter21/StaticMethodPInvoke/StaticMethodPInvoke.cpp b/Chapter21/StaticMethodPInvoke/StaticMethodPInvoke.cpp new file mode 100644 index 0000000..57d6be1 --- /dev/null +++ b/Chapter21/StaticMethodPInvoke/StaticMethodPInvoke.cpp @@ -0,0 +1,28 @@ +// StaticMethodPInvoke.cpp : main project file. + +#include "stdafx.h" + +using namespace System; +using namespace System::Runtime::InteropServices; + +ref class SimpleClass +{ +public: + [DllImport("NativeCode")] + static long square(long value); + + [DllImport("User32", CharSet=CharSet::Auto)] + static int MessageBox(int hWnd, String^ text, String^ caption, + unsigned int type); +}; + +int main(array ^args) +{ + long Squareof4 = SimpleClass::square(4); + + Console::WriteLine(L"The square of 4 is {0}", Squareof4); + + SimpleClass::MessageBox(0, L"Hello World!", L"A Message Box", 0); + + return 0; +} diff --git a/Chapter21/StaticMethodPInvoke/StaticMethodPInvoke.vcproj b/Chapter21/StaticMethodPInvoke/StaticMethodPInvoke.vcproj new file mode 100644 index 0000000..8a364e7 --- /dev/null +++ b/Chapter21/StaticMethodPInvoke/StaticMethodPInvoke.vcproj @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter21/StaticMethodPInvoke/stdafx.cpp b/Chapter21/StaticMethodPInvoke/stdafx.cpp new file mode 100644 index 0000000..92436ba --- /dev/null +++ b/Chapter21/StaticMethodPInvoke/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// StaticMethodPInvoke.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/Chapter21/StaticMethodPInvoke/stdafx.h b/Chapter21/StaticMethodPInvoke/stdafx.h new file mode 100644 index 0000000..39986bd --- /dev/null +++ b/Chapter21/StaticMethodPInvoke/stdafx.h @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// TODO: reference additional headers your program requires here diff --git a/Chapter21/TestCOM/TestCOM.cpp b/Chapter21/TestCOM/TestCOM.cpp new file mode 100644 index 0000000..b343a24 --- /dev/null +++ b/Chapter21/TestCOM/TestCOM.cpp @@ -0,0 +1,35 @@ +// Compile from command line using +// cl /LD TestCOM +// regsvr32 TestCOM.dll + +#define _ATL_ATTRIBUTES +#include +#include + +[module(name="TestCOM",type="dll")]; + +// ITestCOM interface with Square method +[dual] +__interface ITestCOM : IDispatch +{ + [id(0x01)] HRESULT Square([in]LONG Value, [out,retval]LONG* Result); +}; + +// coclass CTestCOM implements the ITestCOM interface +[coclass, threading="both"] +class CTestCOM : public ITestCOM +{ + HRESULT Square(LONG Value, LONG* Result) + { + if (Value > 0x0ffff) + { + *Result = -1; + return E_INVALIDARG; + } + else + { + *Result = Value * Value; + return S_OK; + } + } +}; diff --git a/Chapter21/TestCOM/TestCOM.vcproj b/Chapter21/TestCOM/TestCOM.vcproj new file mode 100644 index 0000000..6f290ac --- /dev/null +++ b/Chapter21/TestCOM/TestCOM.vcproj @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..ec2f635 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,27 @@ +Freeware License, some rights reserved + +Copyright (c) 2006 Stephen R.G. Fraser + +Permission is hereby granted, free of charge, to anyone obtaining a copy +of this software and associated documentation files (the "Software"), +to work with the Software within the limits of freeware distribution and fair use. +This includes the rights to use, copy, and modify the Software for personal use. +Users are also allowed and encouraged to submit corrections and modifications +to the Software for the benefit of other users. + +It is not allowed to reuse, modify, or redistribute the Software for +commercial use in any way, or for a user’s educational materials such as books +or blog articles without prior permission from the copyright holder. + +The above copyright notice and this permission notice need to be included +in all copies or substantial portions of the software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS OR APRESS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..f67f581 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +#Apress Source Code + +This repository accompanies [*Pro Visual C++/CLI and the .NET 2.0 Platform*](http://www.apress.com/9781590596401) by Stephen R.G. Fraser (Apress, 2006). + +![Cover image](9781590596401.jpg) + +Download the files as a zip using the green button, or clone the repository to your machine using Git. + +##Releases + +Release v1.0 corresponds to the code in the published book, without corrections or updates. + +##Contributions + +See the file Contributing.md for more information on how you can contribute to this repository. diff --git a/ReadMe.txt b/ReadMe.txt new file mode 100644 index 0000000..412c545 --- /dev/null +++ b/ReadMe.txt @@ -0,0 +1,26 @@ +------------ +Installation +------------ + +There is nothing special about installing the code for this book. All you need to do is unzip the files into a directory of your choosing. Once unzipped, you will find a directory for each chapter (which has source code). Most chapters have a project file which you will double click to start Visual Studio 2005. The chapters that don't have a project file have a batch file for building the programs that make up the chapter. For these directories you can use any editor to edit the source code contained within them (though, I used Visual Studio 2005 for these as well). + + +------- +Updates +------- + +You have a choice of getting your updates from either www.apress.com or www.procppcli.net. The most up-to-date will be found on www.procppcli.net as I maintain this site. + + +---------------- +Online Community +---------------- + +As I stated in my book, I will continue to provide information on C++/CLI on my Web site www.procppcli.net. I will also make the site available to other authors and developers to write about or provide code written in C++/CLI. The site currently has a FAQ, Discussion, article and download areas. I plan in the future (if demand supports it) a job site. I am also open for suggestions. + + +--- + +Stephen R. G. Fraser + + \ No newline at end of file diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..f6005ad --- /dev/null +++ b/contributing.md @@ -0,0 +1,14 @@ +# Contributing to Apress Source Code + +Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers. + +## How to Contribute + +1. Make sure you have a GitHub account. +2. Fork the repository for the relevant book. +3. Create a new branch on which to make your change, e.g. +`git checkout -b my_code_contribution` +4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted. +5. Submit a pull request. + +Thank you for your contribution! \ No newline at end of file