C++ Exercises(八)

1,创建进程

None.gif #include < windows.h >
None.gif#include
< stdio.h >
None.gif
None.gif
int main(VOID)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifSTARTUPINFOsi;
InBlock.gifPROCESS_INFORMATIONpi;
InBlock.gifZeroMemory(
&si,sizeof(si));
InBlock.gifsi.cb
=sizeof(si);
InBlock.gifZeroMemory(
&pi,sizeof(pi));
InBlock.gif
//Startthechildprocess.
InBlock.gif
if(!CreateProcess(NULL,//Nomodulename(usecommandline).
InBlock.gif
"C://WINDOWS//system32//mspaint.exe",//Commandline.
InBlock.gif
NULL,//Processhandlenotinheritable.
InBlock.gif
NULL,//Threadhandlenotinheritable.
InBlock.gif
FALSE,//SethandleinheritancetoFALSE.
InBlock.gif
0,//Nocreationflags.
InBlock.gif
NULL,//Useparent'senvironmentblock.
InBlock.gif
NULL,//Useparent'sstartingdirectory.
InBlock.gif
&si,//PointertoSTARTUPINFOstructure.
InBlock.gif
&pi)//PointertoPROCESS_INFORMATIONstructure.
InBlock.gif
)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifprintf(
"CreateProcessfailed(%d)./n",GetLastError());
InBlock.gif
return-1;
ExpandedSubBlockEnd.gif}

InBlock.gif
//Waituntilchildprocessexits.
InBlock.gif
WaitForSingleObject(pi.hProcess,INFINITE);
InBlock.gif
//Closeprocessandthreadhandles.
InBlock.gif
CloseHandle(pi.hProcess);
InBlock.gifCloseHandle(pi.hThread);
ExpandedBlockEnd.gif}

None.gif
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

2,创建线程

None.gif
None.gif#include
< stdio.h >
None.gif#include
< iostream >
None.gif#include
< windows.h >
None.gif
using namespace std;
None.gif
ExpandedBlockStart.gifContractedBlock.gifDWORDSum;
/**/ /*dataissharedbythethread(s)*/
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*thethreadrunsinthisseparatefunction*/
None.gifDWORDWINAPISummation(PVOIDParam)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifDWORDUpper
=*(DWORD*)Param;
InBlock.gif
for(DWORDi=0;i<=Upper;i++)
InBlock.gifSum
+=i;
InBlock.gif
return0;
ExpandedBlockEnd.gif}

None.gif
None.gif
int main( int argc, char * argv[])
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifDWORDThreadId;
InBlock.gifHANDLEThreadHandle;
InBlock.gif
intParam=100;
InBlock.gif
if(Param<0)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.giffprintf(stderr,
"aninteger>=0isrequired/n");
InBlock.gif
return-1;
ExpandedSubBlockEnd.gif}

InBlock.gif
//createthethread
InBlock.gif
ThreadHandle=CreateThread(NULL,0,Summation,&Param,0,&ThreadId);
ExpandedSubBlockStart.gifContractedSubBlock.gif
if(ThreadHandle!=NULL)dot.gif{
InBlock.gifWaitForSingleObject(ThreadHandle,INFINITE);
InBlock.gifCloseHandle(ThreadHandle);
InBlock.gifprintf(
"sum=%d/n",Sum);
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

None.gif

3,加载BMP文件

None.gif
None.gif#include
< windows.h >
None.gif#include
< fstream >
None.gif
using namespace std;
None.gif
None.gif
char szAppName[] = " BMPLoad " ;
None.gif
None.gifLRESULTCALLBACKWindowProc(HWND,UINT,WPARAM,LPARAM);
None.gif
None.gif
// **********
None.gif
// classCRaster
None.gif
// -GenericclassforBMPrasterimages.
ExpandedBlockStart.gifContractedBlock.gif
class CRaster dot.gif {
InBlock.gif
public:
InBlock.gif
intWidth,Height;//Dimensions
InBlock.gif
intBPP;//BitsPerPixel.
InBlock.gif
char*Raster;//BitsoftheImage.
InBlock.gif
RGBQUAD*Palette;//RGBPalettefortheimage.
InBlock.gif
intBytesPerRow;//RowWidth(inbytes).
InBlock.gif
BITMAPINFO*pbmi;//BITMAPINFOstructure
InBlock.gif
InBlock.gif
//Memberfunctions(definedlater):
InBlock.gif
intLoadBMP(char*szFile);
InBlock.gif
intGDIPaint(HDChdc,intx,inty);
ExpandedBlockEnd.gif}
;
None.gif
None.gif
// **********
None.gif
// WindowsMainFunction.
None.gif
// -Herestartsourdemoprogram
None.gif
int WINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,
None.gifLPSTRlpCmdLine,
int nCmdShow)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifHWNDhwnd;
InBlock.gifMSGmsg;
InBlock.gif
InBlock.gifWNDCLASSwc;
InBlock.gifwc.style
=CS_HREDRAW|CS_VREDRAW;
InBlock.gifwc.lpfnWndProc
=WindowProc;
InBlock.gifwc.cbClsExtra
=0;
InBlock.gifwc.cbWndExtra
=0;
InBlock.gifwc.hInstance
=hInstance;
InBlock.gifwc.hIcon
=LoadIcon(NULL,IDI_APPLICATION);
InBlock.gifwc.hCursor
=LoadCursor(NULL,IDC_ARROW);
InBlock.gifwc.hbrBackground
=(HBRUSH)(COLOR_WINDOW+1);
InBlock.gifwc.lpszMenuName
=NULL;
InBlock.gifwc.lpszClassName
=szAppName;
InBlock.gif
InBlock.gifRegisterClass(
&wc);
InBlock.gif
InBlock.gifhwnd
=CreateWindow(szAppName,"BMPLoad",WS_OVERLAPPEDWINDOW,
InBlock.gifCW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
InBlock.gif
0,0,hInstance,0);
InBlock.gif
InBlock.gifShowWindow(hwnd,nCmdShow);
InBlock.gifUpdateWindow(hwnd);
InBlock.gif
InBlock.gif
while(GetMessage(&msg,0,0,0))
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifTranslateMessage(
&msg);
InBlock.gifDispatchMessage(
&msg);
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
returnmsg.wParam;
ExpandedBlockEnd.gif}

None.gif
None.gif
// **********
None.gif
// MainWindowProcedure.
None.gif
// -ProcessesWindowMessages
None.gif
LRESULTCALLBACKWindowProc
None.gif(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
staticCRasterbmp;
InBlock.gifHDChdc;
InBlock.gifPAINTSTRUCTps;
InBlock.gif
InBlock.gif
switch(message)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
caseWM_CREATE:
InBlock.gifbmp.LoadBMP(
"example.bmp");
InBlock.gif
return0;
InBlock.gif
caseWM_PAINT:
InBlock.gifhdc
=BeginPaint(hwnd,&ps);
InBlock.gifbmp.GDIPaint(hdc,
10,10);
InBlock.gifEndPaint(hwnd,
&ps);
InBlock.gif
return0;
InBlock.gif
caseWM_DESTROY:
InBlock.gifPostQuitMessage(
0);
InBlock.gif
return0;
ExpandedSubBlockEnd.gif}

InBlock.gif
returnDefWindowProc(hwnd,message,wParam,lParam);
ExpandedBlockEnd.gif}

None.gif
None.gif
// **********
None.gif
// CRaster::LoadBMPFile(FileName);
None.gif
// -loadsaBMPfileintoaCRasterobject
None.gif
// *supportsnon-RLE-compressedfilesof1,2,4,8&24bits-per-pixel
None.gif
int CRaster::LoadBMP( char * szFile)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifBITMAPFILEHEADERbmfh;
InBlock.gifBITMAPINFOHEADERbmih;
InBlock.gif
InBlock.gif
//Openfile.
InBlock.gif
ifstreambmpfile(szFile,ios::in|ios::binary);
InBlock.gif
if(!bmpfile.is_open())return1;//Erroropeningfile
InBlock.gif
InBlock.gif
//Loadbitmapfileheader&infoheader
InBlock.gif
bmpfile.read((char*)&bmfh,sizeof(BITMAPFILEHEADER));
InBlock.gifbmpfile.read((
char*)&bmih,sizeof(BITMAPINFOHEADER));
InBlock.gif
InBlock.gif
//Checkfiletypesignature
InBlock.gif
if(bmfh.bfType!='MB')return2;//FileisnotBMP
InBlock.gif
InBlock.gif
//Assignsomeshortvariables:
InBlock.gif
BPP=bmih.biBitCount;
InBlock.gifWidth
=bmih.biWidth;
InBlock.gifHeight
=(bmih.biHeight>0)?bmih.biHeight:-bmih.biHeight;//absoultevalue
InBlock.gif
BytesPerRow=Width*BPP/8;
InBlock.gifBytesPerRow
+=(4-BytesPerRow%4)%4;//intalignment
InBlock.gif
InBlock.gif
//IfBPParen't24,loadPalette:
InBlock.gif
if(BPP==24)pbmi=(BITMAPINFO*)newchar[sizeof(BITMAPINFO)];
InBlock.gif
else
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifpbmi
=(BITMAPINFO*)newchar[sizeof(BITMAPINFOHEADER)+(1<<BPP)*sizeof(RGBQUAD)];
InBlock.gifPalette
=(RGBQUAD*)((char*)pbmi+sizeof(BITMAPINFOHEADER));
InBlock.gifbmpfile.read((
char*)Palette,sizeof(RGBQUAD)*(1<<BPP));
ExpandedSubBlockEnd.gif}

InBlock.gifpbmi
->bmiHeader=bmih;
InBlock.gif
InBlock.gif
//LoadRaster
InBlock.gif
bmpfile.seekg(bmfh.bfOffBits,ios::beg);
InBlock.gif
InBlock.gifRaster
=newchar[BytesPerRow*Height];
InBlock.gif
InBlock.gif
//(ifheightispositivethebmpisbottom-up,readitreversed)
InBlock.gif
if(bmih.biHeight>0)
InBlock.gif
for(intn=Height-1;n>=0;n--)
InBlock.gifbmpfile.read(Raster
+BytesPerRow*n,BytesPerRow);
InBlock.gif
else
InBlock.gifbmpfile.read(Raster,BytesPerRow
*Height);
InBlock.gif
InBlock.gif
//so,wealwayshaveaup-bottomraster(thatisnegativeheightforwindows):
InBlock.gif
pbmi->bmiHeader.biHeight=-Height;
InBlock.gif
InBlock.gifbmpfile.close();
InBlock.gif
InBlock.gif
return0;
ExpandedBlockEnd.gif}

None.gif
None.gif
// **********
None.gif
// CRaster::GDIPaint(hdc,x,y);
None.gif
// *PaintsRastertoaWindowsDC.
None.gif
int CRaster::GDIPaint(HDChdc, int x = 0 , int y = 0 )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
//Painttheimagetothedevice.
InBlock.gif
returnSetDIBitsToDevice(hdc,x,y,Width,Height,0,0,
InBlock.gif
0,Height,(LPVOID)Raster,pbmi,0);
ExpandedBlockEnd.gif}

None.gif
None.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值