• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            C++博客 聯(lián)系 聚合 管理  

            Blog Stats

            文章分類(17)

            收藏夾(2)

            文章檔案(18)

            相冊

            Blogs

            citywanderer

            先給出一個純凈的Windows程序:

            ?1 #include? < windows.h >
            ?2
            ?3 LRESULT?CALLBACK?MyWndProc(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam);
            ?4
            ?5 int ?WINAPI?WinMain(HINSTANCE?hInstance,?HINSTANCE?hPrevInstance,?LPSTR?lpCmdLine,? int ?nShowCmd)
            ?6 {
            ?7 ????WNDCLASS?MyWndClass;
            ?8 ????HWND?hWnd;
            ?9 ????MSG?msg;
            10 ????UINT?width;
            11 ????UINT?height;
            12
            13 ???? // CS:Class?styles
            14 ????MyWndClass.style? = ?CS_HREDRAW? | ?CS_VREDRAW;
            15 ????MyWndClass.lpfnWndProc? = ?MyWndProc; // Pointer?to?the?window?procedure
            16 ????MyWndClass.cbClsExtra? = ? 0 ;
            17 ????MyWndClass.cbWndExtra? = ? 0 ;
            18 ????MyWndClass.hInstance? = ?hInstance;
            19 ????MyWndClass.hIcon? = ?LoadIcon(NULL,?IDI_APPLICATION);
            20 ????MyWndClass.hCursor? = ?LoadCursor(NULL,?IDC_ARROW);
            21 ????MyWndClass.hbrBackground? = ?(HBRUSH)GetStockObject(WHITE_BRUSH);
            22 ????MyWndClass.lpszMenuName? = ?NULL;
            23 ????MyWndClass.lpszClassName? = ? " myWndClassName " ;
            24 ????
            25 ????RegisterClass( & MyWndClass);
            26 ????
            27 ????width? = ?::GetSystemMetrics(SM_CXSCREEN) / 2 ;
            28 ????height? = ?::GetSystemMetrics(SM_CYSCREEN) / 2 ;
            29
            30 ????hWnd? = ?::CreateWindow( " myWndClassName " ,
            31 ???????????????????????? " window?title " ,
            32 ????????????????????????WS_OVERLAPPEDWINDOW,
            33 ???????????????????????? 10 ,
            34 ???????????????????????? 10 ,
            35 ????????????????????????width,
            36 ????????????????????????height,
            37 ????????????????????????NULL,
            38 ????????????????????????NULL,
            39 ????????????????????????NULL, // also?be?hInstance,
            40 ???????????????????????? /* [in]?Windows?95/98/Me:?Handle?to?the?instance?of?the?module?to?be?associated?with?the?window.?
            41 ????????????????????????????Windows?NT/2000/XP:?This?value?is?ignored.
            42 ???????????????????????? */

            43 ????????????????????????NULL);
            44 ????::ShowWindow(hWnd,?nShowCmd);
            45 ????::UpdateWindow(hWnd);
            46 ????
            47 ???? while (?(bRet? = ?GetMessage(? & msg,?NULL,? 0 ,? 0 ?))? != ? 0 )? // The?thread?get?message?from?thread?message?queque?and?remove?it?from?queue
            48 ???????????????????????????????????????????????????????? // when?encounters?the?WM_QUIT?message,?it?returns?FALSE?and?ends?the?loop.
            49 ???? {?
            50 ???????? if ?(bRet? == ? - 1 )
            51 ???????? {
            52 ???????????? // ?handle?the?error?and?possibly?exit
            53 ????????}

            54 ???????? else
            55 ???????? {
            56 ????????????TranslateMessage( & msg);?
            57 ????????????DispatchMessage( & msg);? // Direct?the?system?to?send?Mes?to?appropriate?window?procedure.and?it??
            58 ??????????????????????????????????? // does?not?pass?the?time?the?message?was?posted?or?mouse?cursor?position.
            59 ????????}

            60 ????}

            61
            62 ???? return ?msg.wParam;
            63
            64 LRESULT?CALLBACK?MyWndProc(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
            65 {
            66 ????HDC?hDC;
            67 ????PAINTSTRUCT?paintStruct;
            68 ???? switch (message)
            69 ???????? {
            70 ???????? case ?WM_PAINT:
            71 ????????hDC? = ?::BeginPaint(hWnd, & paintStruct);
            72 ????????????::TextOut(hDC, 10 , 10 ,mesH + mesM + mesW + mesL, 100 );
            73 ????????::EndPaint(hWnd, & paintStruct);
            74 ???????? return ? 0 ;
            75 ???? case ?WM_LBUTTONDOWN:
            76 ????????MessageBox(hWnd, " 你按下了鼠標(biāo)左鍵 " , " 左鍵按下提示 " ,MB_ICONEXCLAMATION? | ?MB_OK);
            77 ???????? return ? 0 ;
            78 ???? case ?WM_DESTROY:
            79 ????????????::PostQuitMessage( 0 );
            80 ???????????? return ? 0 ;
            81 ????????}

            82 ???? return ?::DefWindowProc(hWnd,message,wParam,lParam);
            83 }

            好多啊,我都不想分析了,頭文件中都有的,我只講講我分析了哪些東西吧,然后把我修改后的代碼(比較亂,不過,如果你也和我作了一樣多的工作,你的代碼肯定也很亂)貼上來。
            我分析的東西:LRESULT、CALLBACK、HWND、UINT、WPARAM、LPARAM……各種我不認(rèn)識的玩意兒,還有就是如何發(fā)送、接收消息如SendMessage……
            ??1#include?<windows.h>
            ??2#include?"atlstr.h"
            ??3
            ??4//決定消息如何處理
            ??5/*?Types?use?for?passing?&?returning?polymorphic?values?*/
            ??6/*????typedef?UINT_PTR????????????WPARAM;
            ??7????typedef?_W64?unsigned?int?UINT_PTR,?*PUINT_PTR;
            ??8
            ??9????typedef?LONG_PTR????????????LPARAM;
            ?10
            ?11????typedef?LONG_PTR????????????LRESULT;
            ?12????typedef?_W64?long?LONG_PTR,?*PLONG_PTR;
            ?13????#define?_W64?__w64
            ?14
            ?15????#define?CALLBACK????__stdcall
            ?16
            ?17????Element????????????????????????????????Implementation??
            ?18????Argument-passing?order????????????????Pushes?parameters?on?the?stack,Right?to?left.
            ?19????Argument-passing?convention????????????By?value,?unless?a?pointer?or?reference?type?is?passed.
            ?20????Stack-maintenance?responsibility????Called?function?pops?its?own?arguments?from?the?stack.
            ?21????Name-decoration?convention????????????An?underscore?(_)?is?prefixed?to?the?name.?The?name?is?followed?
            ?22????????????????????????????????????????by?the?at?sign?(@)?followed?by?the?number?of?bytes?(in?decimal)?
            ?23????????????????????????????????????????in?the?argument?list.?Therefore,?the?function?declared?as?
            ?24????????????????????????????????????????int?func(?int?a,?double?b?)?is?decorated?as?follows:?_func@12
            ?25????
            ?26????DECLARE_HANDLE????????????(HWND);
            ?27????#define?DECLARE_HANDLE(name)?struct?name##__?{?int?unused;?};?typedef?struct?name##__?*name
            ?28????The?two?combined?is
            ?29????struct?HWND__
            ?30????{
            ?31????????int?unused;
            ?32????}*HWND;?
            ?33????*/

            ?34LRESULT?CALLBACK?MyWndProc(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam);
            ?35struct?MSGMAP_ENTRY{
            ?36????UNIT?nMessage;
            ?37????LRESULT?CALLBACK()
            ?38}

            ?39
            ?40/*
            ?41????#define?WINAPI??????__stdcall
            ?42
            ?43????DECLARE_HANDLE(HINSTANCE);
            ?44????#define?DECLARE_HANDLE(name)?struct?name##__?{?int?unused;?};?typedef?struct?name##__?*name
            ?45????The?two?combined?is
            ?46????struct?HINSTANCE__
            ?47????{
            ?48????????int?unused;
            ?49????}*HINSTANCE;?
            ?50
            ?51????typedef?__nullterminated?CHAR?*NPSTR,?*LPSTR,?*PSTR;
            ?52*/

            ?53CString?myWndClassName?=?"any";
            ?54//typedef?LPCSTR?PCTSTR,?LPCTSTR,?PCUTSTR,?LPCUTSTR;
            ?55//typedef?__nullterminated?CONST?CHAR?*LPCSTR,?*PCSTR;
            ?56LPCTSTR?myMes?=?"my?message.";
            ?57UINT?myMesID?=?0;
            ?58int?WINAPI?WinMain(HINSTANCE?hInstance,?HINSTANCE?hPrevInstance,?LPSTR?lpCmdLine,?int?nShowCmd)
            ?59{
            ?60????/*
            ?61????typedef?WNDCLASSA?WNDCLASS;
            ?62????typedef?struct?tagWNDCLASSA?{
            ?63????????UINT????????style;
            ?64????????WNDPROC?????lpfnWndProc;//typedef?LRESULT?(CALLBACK*?WNDPROC)(HWND,?UINT,?WPARAM,?LPARAM);
            ?65????????int?????????cbClsExtra;
            ?66????????int?????????cbWndExtra;
            ?67????????HINSTANCE???hInstance;
            ?68????????HICON???????hIcon;
            ?69????????HCURSOR?????hCursor;
            ?70????????HBRUSH??????hbrBackground;
            ?71????????LPCSTR??????lpszMenuName;
            ?72????????LPCSTR??????lpszClassName;
            ?73????}?WNDCLASSA,?*PWNDCLASSA,?NEAR?*NPWNDCLASSA,?FAR?*LPWNDCLASSA;
            ?74????*/

            ?75????WNDCLASS?MyWndClass;//每個Windows應(yīng)用程序都必須創(chuàng)建MyWndClass結(jié)構(gòu)的一個實例
            ?76??????????????????????//并利用Windows對其注冊
            ?77????HWND?hWnd;
            ?78
            ?79????/*
            ?80????*?Message?structure
            ?81????typedef?struct?tagMSG?{
            ?82????????HWND????????hwnd;
            ?83????????UINT????????message;
            ?84????????WPARAM??????wParam;
            ?85????????LPARAM??????lParam;
            ?86????????DWORD???????time;
            ?87????????POINT???????pt;
            ?88????#ifdef?_MAC
            ?89????????DWORD???????lPrivate;
            ?90????#endif
            ?91????}?MSG,?*PMSG,?NEAR?*NPMSG,?FAR?*LPMSG;
            ?92????*/

            ?93????MSG?msg;
            ?94????//typedef?unsigned?int????????UINT;
            ?95????UINT?width;
            ?96????UINT?height;
            ?97
            ?98????//CS:Class?styles
            ?99????MyWndClass.style?=?CS_HREDRAW?|?CS_VREDRAW;
            100????MyWndClass.lpfnWndProc?=?MyWndProc;//Pointer?to?the?window?procedure
            101????MyWndClass.cbClsExtra?=?0;
            102????MyWndClass.cbWndExtra?=?0;
            103????MyWndClass.hInstance?=?hInstance;
            104????MyWndClass.hIcon?=?LoadIcon(NULL,?IDI_APPLICATION);
            105????MyWndClass.hCursor?=?LoadCursor(NULL,?IDC_ARROW);
            106????MyWndClass.hbrBackground?=?(HBRUSH)GetStockObject(WHITE_BRUSH);
            107????MyWndClass.lpszMenuName?=?NULL;
            108????MyWndClass.lpszClassName?=?myWndClassName;
            109
            110????/*
            111????#define?RegisterClass??RegisterClassA
            112????WINUSERAPI
            113????ATOM
            114????WINAPI
            115????RegisterClassA(
            116????????__in?CONST?MyWndClassA?*lpMyWndClass);
            117????typedef?WORD????????????????ATOM;
            118????typedef?unsigned?short??????WORD;
            119????*/

            120????ATOM?classAtom?=?RegisterClass(&MyWndClass);
            121????if(classAtom?==?0)
            122????{
            123????????return?0;
            124????}

            125
            126????width?=?::GetSystemMetrics(SM_CXSCREEN)/2;
            127????height?=?::GetSystemMetrics(SM_CYSCREEN)/2;
            128
            129????CString?title;
            130????switch(nShowCmd)
            131????{
            132????case?SW_HIDE:
            133????????title?=?"Hides?the?window?and?activates?another?window.";
            134????????break;
            135????case?SW_MAXIMIZE:
            136????????title?=?"Hides?the?window?and?activates?another?window.";
            137????????break;
            138????case?SW_MINIMIZE:
            139????????title?=?"Minimizes?the?specified?window?and?activates?the?next?top-level?window?in?the?Z?order.";
            140????????break;
            141????case?SW_RESTORE:
            142????????title?=?"Activates?and?displays?the?window.?If?the?window?is?minimized?or?maximized,?the?system?restores?it?to?its?original?size?and?position.?An?application?should?specify?this?flag?when?restoring?a?minimized?window.";
            143????????break;
            144????case?SW_SHOW:
            145????????title?=?"Activates?the?window?and?displays?it?in?its?current?size?and?position.";
            146????????break;
            147????/*case?SW_SHOWMAXIMIZED:
            148????????title?=?"Activates?the?window?and?displays?it?as?a?maximized?window.";
            149????????break;*/

            150????case?SW_SHOWMINNOACTIVE:
            151????????title?=?"Displays?the?window?as?a?minimized?window.?This?value?is?similar?to?SW_SHOWMINIMIZED,?except?the?window?is?not?activated.";
            152????????break;
            153????case?SW_SHOWNA:
            154????????title?=?"Displays?the?window?in?its?current?size?and?position.?This?value?is?similar?to?SW_SHOW,?except?the?window?is?not?activated..";
            155????????break;
            156????case?SW_SHOWNOACTIVATE:
            157????????title?=?"Displays?a?window?in?its?most?recent?size?and?position.?This?value?is?similar?to?SW_SHOWNORMAL,?except?the?window?is?not?actived.";
            158????????break;
            159????case?SW_SHOWNORMAL:
            160????????title?=?"Activates?and?displays?a?window.?If?the?window?is?minimized?or?maximized,?the?system?restores?it?to?its?original?size?and?position.?An?application?should?specify?this?flag?when?displaying?the?window?for?the?first?time.";
            161????????break;
            162????}

            163????CString?temp,?temp1;
            164????temp.Format("hInstance:%d",?hInstance->unused);
            165????if(hPrevInstance?!=?NULL)
            166????{
            167????????temp1.Format("??hPrevInstance:%d",?hPrevInstance->unused);
            168????}

            169????else
            170????{
            171????????temp1?=?"??hPrevInstance:NULL";
            172????}

            173????title?=?temp?+?temp1?+?"?????nShowCmd:?"+title;
            174????hWnd?=?::CreateWindow(myWndClassName,
            175????????????????????????title,
            176????????????????????????WS_OVERLAPPEDWINDOW,
            177????????????????????????10,
            178????????????????????????10,
            179????????????????????????width,
            180????????????????????????height,
            181????????????????????????NULL,
            182????????????????????????NULL,
            183????????????????????????NULL,//also?be?hInstance,
            184????????????????????????/*[in]?Windows?95/98/Me:?Handle?to?the?instance?of?the?module?to?be?associated?with?the?window.?
            185????????????????????????????Windows?NT/2000/XP:?This?value?is?ignored.
            186????????????????????????*/

            187????????????????????????NULL);
            188????::ShowWindow(hWnd,?nShowCmd);
            189????::UpdateWindow(hWnd);
            190
            191????myMesID?=?RegisterWindowMessage(myMes);?
            192
            193????BOOL?bRet;
            194????/*
            195????*?Message?structure
            196????typedef?struct?tagMSG?{
            197????????HWND????????hwnd;
            198????????UINT????????message;
            199????????WPARAM??????wParam;
            200????????LPARAM??????lParam;
            201????????DWORD???????time;
            202????????POINT???????pt;
            203????#ifdef?_MAC
            204????????DWORD???????lPrivate;
            205????#endif
            206????}?MSG,?*PMSG,?NEAR?*NPMSG,?FAR?*LPMSG;
            207????*/

            208
            209????//while(true);?//?ending?the?message?loop?is?often?the?first?step?in?closing?the?application.?
            210????while(?(bRet?=?GetMessage(?&msg,?NULL,?0,?0?))?!=?0)?//The?thread?get?message?from?thread?message?queque?and?remove?it?from?queue
            211????????????????????????????????????????????????????????//when?encounters?the?WM_QUIT?message,?it?returns?FALSE?and?ends?the?loop.
            212????{?
            213????????if?(bRet?==?-1)
            214????????{
            215????????????//?handle?the?error?and?possibly?exit
            216????????}

            217????????else
            218????????{
            219????????????TranslateMessage(&msg);?
            220????????????DispatchMessage(&msg);?//Direct?the?system?to?send?Mes?to?appropriate?window?procedure.and?it??
            221???????????????????????????????????//does?not?pass?the?time?the?message?was?posted?or?mouse?cursor?position.
            222????????}

            223????}

            224????//while(::GetMessage(&msg,NULL,0,0))//GetMessage()從窗口消息隊列中索取消息
            225?//???{
            226?//???????::TranslateMessage(&msg);?
            227?//???????//TranslateMessage()處理虛擬消息鍵(代表按鍵的消息),
            228?//???????//將它們譯為字符消息,送回到消息隊列。????
            229?//???????::DispatchMessage(&msg);?
            230?//????????//DispatchMessage()將消息發(fā)給應(yīng)用程序的窗口過程WndProc()????????
            231?//???}
            232????return?msg.wParam;
            233
            234}

            235
            236LRESULT?CALLBACK?MyWndProc(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
            237{
            238????HDC?hDC;
            239????PAINTSTRUCT?paintStruct;
            240????HWND?hWnd1;
            241????CString?mesH,?mesM,?mesW,?mesL;
            242????if((message?==?myMesID)?&&?(myMesID?!=?0))
            243????{
            244????????MessageBox(hWnd,"my?message?appear!","提示",MB_ICONEXCLAMATION?|?MB_OK);
            245????????return?1;
            246????}

            247????switch(message)
            248????{
            249????case?WM_PAINT:
            250????????if(hWnd?!=?NULL)
            251????????{
            252????????????mesH.Format("HWND:?!NULL");//,?hWnd->unused);
            253????????}

            254????????if(message?!=?NULL)
            255????????????mesM.Format("?message:?%d",?message);
            256????????else
            257????????????mesM.Format("?message:?NULL");
            258????????if(wParam?!=?NULL)
            259????????????mesW.Format("?WPARAM:?%d",?wParam);
            260????????else
            261????????????mesW.Format("?WPARAM:?NULL");
            262????????if(lParam?!=?NULL)
            263????????????mesL.Format("?LPARAM:?%l",?lParam);
            264????????else
            265????????????mesL.Format("?LPARAM:?NULL");
            266????????hDC?=?::BeginPaint(hWnd,&paintStruct);
            267????????::TextOut(hDC,10,10,mesH+mesM+mesW+mesL,100);
            268????????//MessageBox(hWnd,mesH+mesM+mesW+mesL,"提示",MB_ICONEXCLAMATION?|?MB_OK);
            269????????//::TextOut(hDC,100,100,"小輝愿和大家一起進(jìn)步!",20);
            270????????::EndPaint(hWnd,&paintStruct);
            271????????return?0;
            272????case?WM_LBUTTONDOWN:
            273????????MessageBox(hWnd,"你按下了鼠標(biāo)左鍵,?又一個窗口生成了!?and?Post?a?myself?message","左鍵按下提示",MB_ICONEXCLAMATION?|?MB_OK);
            274????????/*hWnd1?=?::CreateWindow(myWndClassName,
            275????????????????????????"child",
            276????????????????????????WS_OVERLAPPEDWINDOW,
            277????????????????????????20,
            278????????????????????????20,
            279????????????????????????60,
            280????????????????????????60,
            281????????????????????????NULL,
            282????????????????????????NULL,
            283????????????????????????NULL,
            284????????????????????????NULL);
            285????????::ShowWindow(hWnd1,?SW_SHOW);
            286????????::UpdateWindow(hWnd1);*/

            287????????if(myMesID?!=?0)
            288????????{
            289????????????/*
            290????????????1?If?the?application?supplies?a?NULL?window?handle?when?calling?PostMessage,?the?message?is?posted?to?
            291????????????the?queue?associated?with?the?current?thread
            292????????????2?HWND_TOPMOST:post?message?to?all?top-level?windows?in?the?system.
            293????????????*/

            294????????????//PostMessage(HWND_TOPMOST,?myMesID,?0,?0);?
            295????????????
            296????????????/*
            297????????????The?function?waits?until?the?window?procedure?completes?processing?and?then?returns?the?message?result.
            298????????????*/

            299????????????if(SendMessage(HWND_TOPMOST,?myMesID,?0,?0)?==?1)
            300????????????{
            301????????????????MessageBox(hWnd,"get?result?after?send?message!","Congratulation",MB_ICONEXCLAMATION?|?MB_OK);
            302????????????}

            303????????}

            304????????return?0;
            305????case?WM_GETMINMAXINFO:
            306????????if(hWnd?!=?NULL)
            307????????{
            308????????????mesH.Format("HWND:?!NULL");
            309????????}

            310????????if(message?!=?NULL)
            311????????????mesM.Format("?message:?%d",?message);
            312????????else
            313????????????mesM.Format("?message:?NULL");
            314????????if(wParam?!=?NULL)
            315????????????mesW.Format("?WPARAM:?%d",?wParam);
            316????????else
            317????????????mesW.Format("?WPARAM:?NULL");
            318????????if(lParam?!=?NULL)
            319????????????mesL.Format("?LPARAM:?!NULL");
            320????????else
            321????????????mesL.Format("?LPARAM:?NULL");
            322????????//MessageBox(hWnd,mesH+mesM+mesW+mesL,"提示",MB_ICONEXCLAMATION?|?MB_OK);
            323????????return?0;
            324????case?WM_DESTROY:
            325????????::PostQuitMessage(0);
            326????????return?0;
            327????}

            328
            329????return?::DefWindowProc(hWnd,message,wParam,lParam);//?system?for?default?processing
            330}
            posted on 2006-06-18 12:05 citywanderer 閱讀(587) 評論(0)  編輯 收藏 引用 所屬分類: C++
            91麻豆国产精品91久久久| 欧洲国产伦久久久久久久| 国产一久久香蕉国产线看观看| 看久久久久久a级毛片| 国产精品久久影院| 久久97久久97精品免视看秋霞| 亚洲国产婷婷香蕉久久久久久| 久久精品国产色蜜蜜麻豆| 精品久久久久久国产潘金莲| 午夜不卡888久久| 亚洲欧洲久久久精品| av无码久久久久久不卡网站| 精品久久久久一区二区三区| 一本一本久久A久久综合精品 | 亚洲熟妇无码另类久久久| 99久久人妻无码精品系列蜜桃| 国产精品久久久久久久午夜片| 无码人妻精品一区二区三区久久| 国产精品美女久久久| 一个色综合久久| 99久久综合狠狠综合久久| 国产aⅴ激情无码久久| 一本大道久久a久久精品综合| 一97日本道伊人久久综合影院| 99久久婷婷免费国产综合精品| 日韩欧美亚洲综合久久| 青青青国产成人久久111网站| 精品久久久久久久国产潘金莲| 久久久精品午夜免费不卡| 99精品久久久久久久婷婷| 久久国产免费直播| 精品久久久久中文字幕日本| 一本一道久久a久久精品综合| 精品久久久久久综合日本| 亚洲精品国产字幕久久不卡| 亚洲国产成人精品女人久久久| 国产精品一区二区久久精品| 亚洲国产精品无码久久一区二区| 无码8090精品久久一区| 国产精品99久久精品爆乳| 精品国产福利久久久|