• <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>

            glxhyt

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              15 隨筆 :: 0 文章 :: 4 評(píng)論 :: 0 Trackbacks
             

                      日記 2010-4-5

            關(guān)于MFC中的文本的編程:

            簡(jiǎn)單是:

            1,在CTestView中定義兩個(gè)變量一個(gè)為CPointm_ptOrigin并設(shè)置為0;和

            CString m_strLine的并設(shè)置為“”,在CTextView中。Cpp設(shè)置。

            2,在CTestView中建立windows WM_CREAT中創(chuàng)建OnCreate

            中編輯    //CClientDC dc(this);

            //     TEXTMETRIC tm;

            //     dc.GetTextMetrics(&tm);

                   //CreateSolidCaret(20,100);

            //     CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);

            //     ShowCaret();

                    //CBitmap bitmap;

                    bitmap.LoadBitmap(IDB_BITMAP1);

                    CreateCaret(&bitmap);//注意變量

                    ShowCaret();

                  

            3,在OnDraw中編輯

            CTextDoc* pDoc = GetDocument();

                   ASSERT_VALID(pDoc);

                   CString str("我愛(ài)你,你愛(ài)我嗎?");

                   pDC->TextOut(50,50,str);

             

                   CSize sz=pDC->GetTextExtent(str);

             

                   str.LoadString(IDS_STRING61446);

                   pDC->TextOut(0,200,str);

                   pDC->BeginPath();

                   pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);

                   pDC->EndPath();

             

                   pDC->SelectClipPath(RGN_AND);

                  

                   for(int i=0;i<300;i+=10)

                   {

             

                          pDC->MoveTo(0,i);

                          pDC->LineTo(300,i);

                          pDC->MoveTo(i,0);

                          pDC->LineTo(i,300);

                   }

            4

            OnLButton

            SetCaretPos(point);

                   m_strLine.Empty();

                   m_ptOrigin=point;

            5,在OnChar中:

                   CClientDC dc(this);

                   m_strLine+=nChar;

                   dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

            參見書中的152頁(yè)。

            注意幾個(gè)函數(shù):

            1.dc.GetTextExtent可以得到字符串寬度、

              CSize sz=dc.GetTextExtent(m_strLine);

             

            2.GetTextMetrics 是為了獲得當(dāng)前字體的度量信息

            3.捉迷藏:#include<stdio.h>

            4.void main()

            5.{

            6. 

            7.    int a[10]={11,11,11,11,11,11,11,11,11,11};

            8.    int i=0;

            9.    for(int j=0;j<1000;j++)

            10.   {

            11.       i=(i+j+1)%10;

            12.      a[i]=i;

            13.   }

            14.   for(int k=0;k<10;k++)

            15.   {

            16. 

            17.          if(a[k]==11)

            18.                 printf("%d\n",k);

            19.   }

            20. 

            21.}

            22.另一種做法:鏈表法:

            23.#include<iostream>

            24.using namespace std;

            25. 

            26.typedef struct node

            27.{

            28. int data;

            29. node *next;

            30.}node;

            31. 

            32.node *node_create(int n);

            33.node *node_create(int n)

            34.{

            35. node *pRet=NULL;

            36. if(0!=n)

            37. {

            38.   int n_idx=1;

            39.   node *p_node=NULL;

            40. 

            41.   p_node= new node[n];

            42.   /*if(NULL==p_node)

            43.   {

            44.     return NULL;

            45.   }

            46.   else

            47.   {

            48.     memset(p_node,0,n*sizeof(node));

            49. 

            50.   }*/

            51.   pRet=p_node;

            52.   while(n_idx<n)

            53.   {

            54.     p_node->data=n_idx;

            55.   p_node->next=p_node+1;

            56.   p_node=p_node->next;

            57.   n_idx++;

            58.   }

            59. 

            60.   p_node->data=n;

            61.   p_node->next=pRet;

            62. 

            63. }

            64. return pRet;

            65.}

            66. 

            67. int main()

            68. {

            69.   node *pList=NULL;

            70.   node *pIter=NULL;

            71.   int n=10;

            72.   //int m=6;

            73. 

            74.   pList=node_create(n);

            75. 

            76.   pIter=pList;

            77.   //m%=n;

            78. //while(pIter!=pIter->next)

            79. // {

            80.     int a[10]={0};

            81.      a[(pIter->data)-1]=pIter->data;

            82.   for(int j=2;j<1000;j++)

            83.   {

            84.    for(int i=1;i<=j;i++)

            85.    {

            86.        pIter=pIter->next;

            87.    }

            88.    printf("%d",pIter->data);

            89.    printf(" ");

            90.    a[(pIter->data)-1]=pIter->data;

            91.  

            92.  

            93.  

            94.      //printf("%d\n",pIter->next->data);

            95.   // pIter->next=pIter->next->next;

            96.   // pIter=pIter->next;

            97.   }

            98.   printf("他隱藏的洞為:");

            99.        for(int k=0;k<10;k++)

            100.        {

            101.            if(a[k]==0)

            102.                      printf("%d   ",k+1);

            103.        }

            104. 

            105. 

            106. 

            107. // }

            108.   //printf("%d\n",pIter->data);

            109.   delete[] pList;

            110.   return 0;

            111. }

            112. 

            113. 

            114. 

            115. 

            116. 

            117. 

             

            關(guān)于文本編輯時(shí)的光標(biāo)的移動(dòng):

            CSize sz = dc.GetTextExtent(m_strLine);

                   CPoint pt;

                   pt.x=m_ptOrigin.x+sz.cx;

                   pt.y=m_ptOrigin.y;

                   SetCaretPos(pt);

            關(guān)于字體的的設(shè)置:

                   CFont font;

                   font.CreatePointFont(300,"華文行楷",NULL);

                   CFont *pOldFont = dc.SelectObject(&font);

            。。。。。。。。。。。。。

            dc.SelectObject(pOldFont);

             

            文件操作函數(shù):

            Fopen

            Fseek

            Ftell

            Fread

            Fclose

            Rewind

            Fflush

            文件的操作

            關(guān)于文件的打開和寫入:
            FILE *pFile=fopen("1.txt","w");

            Fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile);

            關(guān)于文件的寫入:

            加入:*****

                 Fclose(pFile);

                 Fflush(pFile):

             

            1,fseek函數(shù)可以吧文件指針從當(dāng)前位置移動(dòng)到指定的位置

            *****************

             Feek(pFile,0,SEEK_SET);

            Fwrite(“ftp:”,1,strlen("ftp:"),pFile);

            Fclose(pfile);

            2.文件的讀取有三種方法:
            第一種:

             FILE *pFile=fopen("1.txt","r");

            Char ch[100];

            Fread(ch,1,100,pFile);

            Fclose(pFile);

            MessageBox(ch);

            錯(cuò)誤的

            應(yīng)該修改為:

             第一種:

            FLFE *pFile=fopen("1.txt","w"):

            Char buf[20]="http://ww.sunxin.org":

            Buf[21]='\0';

            Fwrite(but,1,22,pFile);

            Fclose(pFile);

            第二種為:

            FILE *pFile-fopen("1.txt","r");

            Char ch[100];

            Memset(ch,0,100);

            Fread(ch,1,100,pFile);

            Fclose(pFile_;

            MessageBox(ch);

             

            第三種:

            FILE *pFile=fopen("1.txt","r");

            Char *pBuf

            Fseek(pFile,0,SEEK_END);將文件指針移到文件末尾

            Int len=ftell(pFile); *****ftell函數(shù)是為了獲得文件的長(zhǎng)度

            pBuf=new char[len+1];

            Fread(pBuf,1.len,pFile);

            pBuf[len]=0;

            Fclose(pFile);

            messageBox(pBuf);

             

            注意:**********

            二進(jìn)制文件和文本文件,二進(jìn)制文件的讀取時(shí)增加了一個(gè)rbwb

             

            一個(gè)面試題:

             FILE *pFile=fopen("3,txt,","w");

            Int i=98341;

            Char ch[5];

            Itoa(i,ch,10);

             

            Fwrite(ch,1,5,pFile);

            Fclose(pFile);

            或者這樣做:

            FILE *pFile=fopen("2,txt","w");

            Char ch[5];

            Ch[0]=9+48:

            Ch[1]=8+48:

            Ch[2]=3+48:

            Ch[3]=4+48:

            Ch[4]=1+48:

             

            ************

            C++關(guān)于文件的操作時(shí)用的ofstreamifstream

            **********注意一點(diǎn)是必須增加頭文件:#include<fstream.h>

            **********

            Win32 API 關(guān)于文件的操作:

            文件的創(chuàng)建或打開用的CreatFile

            文件的寫入時(shí):WrieFile

            文件按的讀取:ReadFile

            例如:

             Void CFIleView::OnFileWrite()

            {

             

            定義一個(gè)句柄變量

            HANDLE hFile;

            創(chuàng)建文件:

            hFile=CreateFile***********

            接收實(shí)際寫入的字節(jié)數(shù):

            DWORD dwWrite;

            寫入數(shù)據(jù)

            WriteFile*********

            關(guān)閉句柄

            CloseHandlehFile );

             

             

            }

            參照vc++深入編程458頁(yè)

            關(guān)于MPC對(duì)文件的操作:

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

               日記2010-4-6

            int a; //是聲明也是定義!

            extern int a; //聲明!

            //int 可以省略!

            extern int a = 1; //出錯(cuò)

            *********

            char ch;

            ch = “A ”;地址

            char ch;

            ch = ‘A’;

            #include <stdio.h>

            int fun(int a)

            {

            if(a>0)

            { printf("a>0\n");return 1;}

            if(0==a)

            { printf("a=0\n");return 0; }

            if(a<0)

            { printf("a<0\n");return -1; }

            }

            思考:存在問(wèn)題

            思考下面這個(gè)函數(shù)設(shè)計(jì)有什么問(wèn)題

            warning C4715: 'fun' : not all control paths return a valu

            必須添加return 0

            文件使用方式意 義

            rt” 只讀打開一個(gè)文本文件,只允許讀數(shù)據(jù)

            wt” 只寫打開或建立一個(gè)文本文件,只允許寫數(shù)據(jù)

            at” 追加打開一個(gè)文本文件,并在文件末尾寫數(shù)據(jù)

            rb” 只讀打開一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)

            wb” 只寫打開或建立一個(gè)二進(jìn)制文件,只允許寫數(shù)據(jù)

            ab” 追加打開一個(gè)二進(jìn)制文件,并在文件末尾寫數(shù)據(jù)

            rt+” 讀寫打開一個(gè)文本文件,允許讀和寫

            wt+” 讀寫打開或建立一個(gè)文本文件,允許讀寫

            at+” 讀寫打開一個(gè)文本文件,允許讀,或在文件末追加數(shù) 據(jù)

            rb+” 讀寫打開一個(gè)二進(jìn)制文件,允許讀和寫

            wb+” 讀寫打開或建立一個(gè)二進(jìn)制文件,允許讀和寫

            ab+” 讀寫打開一個(gè)二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)

            對(duì)于文件使用方式有以下幾點(diǎn)說(shuō)明:

            1. 文件使用方式由r,w,a,t,b+六個(gè)字符拼成,各字符的含義是:

            r(read):

            w(write):

            a(append): 追加

            t(text): 文本文件,可省略不寫

            b(banary): 二進(jìn)制文件

            +: 讀和寫

            2. 凡用“r”打開一個(gè)文件時(shí),該文件必須已經(jīng)存在, 且只能從該文件讀出。

             

            Getch() 是為了獲得一個(gè)字符,但是不顯示

            Getchar() 是為了獲得一個(gè)字符 ,ch=getchar();

            Getche() 是為了獲得一個(gè)字符ASCII

             

             

             

             

            [10.1]讀入文件e10-1.c,在屏幕上輸出。

            #include<stdio.h>

            main()

            {

            FILE *fp;

            char ch;

            if((fp=fopen("e10_1.c","rt"))==NULL)

            {

            printf("Cannot open file strike any key exit!");

            Generated by Foxit PDF Creator © Foxit Software

            http://www.foxitsoftware.com For evaluation only.

            getch();

            exit(1);

            }

            ch=fgetc(fp);//是從文件中讀取一個(gè)字符;

            while (ch!=EOF) EOF表示是-1

            {

            putchar(ch);//輸出字符串

            ch=fgetc(fp);

            }

            fclose(fp);

            }

            關(guān)于結(jié)構(gòu)體:#include"stdio.h"

            #define NUM 3

            struct mem

            {

            char name[20];

            char phone[10];

            };

            void main()

            {

            struct mem man[NUM];

            int i;

            for(i=0;i<NUM;i++)

            {

            printf("input name:\n");

            gets(man[i].name);

            printf("input phone:\n");

            gets(man[i].phone);

            }

            printf("name\t\t\tphone\n\n");

            for(i=0;i<NUM;i++)

            printf("%s\t\t\t%s\n",man[i].name,man[i].phone);}

             

            [7.7]用指針變量輸出結(jié)構(gòu)數(shù)組。

            struct stu

            {

            int num;

            char *name;

            char sex;

            float score;

            }boy[5]={

            {101,"Zhou ping",'M',45},

            {102,"Zhang ping",'M',62.5},

            {103,"Liou fang",'F',92.5},

            {104,"Cheng ling",'F',87},

            {105,"Wang ming",'M',58},

            };

            main()

            {

            struct stu *ps;

            printf("No\tName\t\t\tSex\tScore\t\n");

            for(ps=boy;ps<boy+5;ps++)

            printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->

            score);

            }

            “聯(lián)合”與“結(jié)構(gòu)”有一些相似之處。但兩者有本質(zhì)上的不同。在結(jié)構(gòu)中各成員有各自的內(nèi)存空間,一個(gè)結(jié)構(gòu)變量的總長(zhǎng)度是

            各成員長(zhǎng)度之和。而在“聯(lián)合”中,各成員共享一段內(nèi)存空間,一個(gè)聯(lián)合變量的長(zhǎng)度等于各成員中最長(zhǎng)的長(zhǎng)度。應(yīng)該說(shuō)明的是, 這

            里所謂的共享不是指把多個(gè)成員同時(shí)裝入一個(gè)聯(lián)合變量?jī)?nèi),而是指該聯(lián)合變量可被賦予任一成員值,但每次只能賦一種值, 賦入

            新值則沖去舊值。如前面介紹的“單位”變量, 如定義為一個(gè)可裝入“班級(jí)”或“教研室”的聯(lián)合后,就允許賦予整型值(班級(jí))

            或字符串(教研室)。要么賦予整型值,要么賦予字符串,不能把兩者同時(shí)賦予它。聯(lián)合類型的定義和聯(lián)合變量的說(shuō)明一個(gè)聯(lián)合類型

            必須經(jīng)過(guò)定義之后, 才能把變量說(shuō)明為該聯(lián)合類型

            2010 4 8 日記:

            #include <windows.h>

            WINDOWS.H是主要的含入文件,它包含了其它Windows表頭文件,這些表頭文件的某些也包含了其它表頭文件。這些表頭文件中最重要的和最基本的是:

            WINDEF.H 基本型態(tài)定義。

            WINNT.H 支持Unicode的型態(tài)定義。

            WINBASE.H Kernel函數(shù)。

            WINUSER.H 使用者接口函數(shù)。

            WINGDI.H 圖形設(shè)備接口函數(shù)。

             

            #include <windows.h>

             

            int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

            PSTR szCmdLine, int iCmdShow)

            {

            MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);

            return 0 ;

            }

             

             

            int

            WINAPI

            WinMain

            HINSTANCE hInstance,

            HINSTANCE hPrevInstance,

            LPSTR lpCmdLine,

            int nShowCmd

            ;

            WinMain的第一個(gè)參數(shù)被稱作「執(zhí)行實(shí)體句柄」。在Windows程序設(shè)計(jì)中,句柄僅是一個(gè)應(yīng)用程序用來(lái)識(shí)別某些東西的數(shù)字。在這種情況下,該句柄唯一地標(biāo)識(shí)該程序,還需要它在其它Windows函數(shù)呼叫中作為參數(shù)。Windows的早期版本中,當(dāng)同時(shí)運(yùn)行同一程序多次時(shí),您便創(chuàng)建了該程序的「多個(gè)執(zhí)行實(shí)體(multiple instances)」。同一應(yīng)用程序的所有執(zhí)行實(shí)體共享程序和只讀的內(nèi)存(通常是例如菜單和對(duì)話框模板的資源)。程序通過(guò)檢查hPrevInstance參數(shù)就能夠確定自身的其它執(zhí)行實(shí)體是否正在運(yùn)行。然后它可以略過(guò)一些繁雜的工作并從前面的執(zhí)行實(shí)體將某些數(shù)據(jù)移到自己的數(shù)據(jù)區(qū)域。

            32Windows版本中,該概念已被拋棄。傳給WinMain的第二個(gè)參數(shù)總是NULL(定義為0)。

            WinMain的第三個(gè)參數(shù)是用于執(zhí)行程序的命令列。某些Windows應(yīng)用程序利用它在程序啟動(dòng)時(shí)將文件加載內(nèi)存。WinMain的第四個(gè)參數(shù)指出程序最初顯示的方式,可以是正常的或者是最大化地充滿整個(gè)畫面,或者是最小化顯示在工作列中。我們將在第三章中介紹使用該參數(shù)的方法。

             

             

            MessageBox函數(shù)用于顯示短信息。雖然,MessageBox顯示的小窗口不具有什么功能,實(shí)際上它被認(rèn)為是一個(gè)對(duì)話框。

            MessageBox的第一個(gè)參數(shù)通常是窗口句柄,我們將在第三章介紹其含義。第二個(gè)參數(shù)是在消息框主體中顯示的字符串,第三個(gè)參數(shù)是出現(xiàn)在消息框標(biāo)題列上的字符串。在HELLMSG.C中,這些文字字符串的每一個(gè)都被封裝在一個(gè)TEXT宏中。通常您不必將所有字符串都封裝在TEXT宏中,但如果想將您的程序轉(zhuǎn)換為Unicode字符集,這確是一個(gè)好主意。我將在第二章詳細(xì)討論該問(wèn)題。

            MessageBox的第四個(gè)參數(shù)可以是在WINUSER.H中定義的一組以前綴MB_開始的常數(shù)的組合。您可從第一組中選擇一個(gè)常數(shù)指出希望在對(duì)話框中顯示的按鈕:

            #define MB_OK           0x00000000L

            #define MB_OKCANCEL   x00000001L

            #define MB_ABORTRETRYIGNORE 0x00000002L

            #define MB_YESNOCANCEL       0x00000003L

             

            正常情況下,在編譯階段,編譯器從C原始碼文件產(chǎn)生一個(gè).OBJ(目標(biāo))文件。在連結(jié)階段,連結(jié)程序結(jié)合.OBJ文件和.LIB(庫(kù))文件以建立.EXE(可執(zhí)行)文件。通過(guò)在「 Project」頁(yè)面標(biāo)簽上選擇「Settings」并單擊「 Link」頁(yè)面標(biāo)簽可以查看這些庫(kù)文件的列表。特別地,您會(huì)注意到KERNEL32.LIBUSER32.LIBGDI32.LIB。這些是三個(gè)主要Windows子系統(tǒng)的「引用鏈接庫(kù)」。它們包含了動(dòng)態(tài)鏈接庫(kù)的名稱以及放進(jìn).EXE文件的引用信息。Windows使用該信息處理程序?qū)?span>KERNEL32.DLLUSER32.DLLGDI32.DLL動(dòng)態(tài)鏈接庫(kù)中函數(shù)的呼叫。

             

            2010 4 9

            這個(gè)問(wèn)題用幾個(gè)解決方案。我首選的方案是:

            while(1)

            {

            ?}

            5. 用變量a 給出下面的定義

            a) 一個(gè)整型數(shù)(An integer

            b)一個(gè)指向整型數(shù)的指針( A pointer to an integer

            c)一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數(shù)( A pointer to a pointer to an integer

            d)一個(gè)有10 個(gè)整型數(shù)的數(shù)組( An array of 10 integers

            e) 一個(gè)有10 個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的。(An array of 10 pointers to integers

            f) 一個(gè)指向有10 個(gè)整型數(shù)數(shù)組的指針( A pointer to an array of 10 integers

            g) 一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)(A pointer to a function that takes an integer as an argument

            and returns an integer

            h)一個(gè)有10 個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)( An array of ten pointers to functions t

            hat take an integer argument and return an integer

            答案是:

            a) int a; // An integer

            b) int *a; // A pointer to an integer

            c) int **a; // A pointer to a pointer to an integer

            d) int a[10]; // An array of 10 integers

            e) int *a[10]; // An array of 10 pointers to integers

            f) int (*a)[10]; // A pointer to an array of 10 integers

            g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

            h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

            人們經(jīng)常聲稱這里有幾個(gè)問(wèn)題是那種要翻一下書才能回答的問(wèn)題,我同意這種說(shuō)法。當(dāng)我寫這篇文章時(shí),為了確定語(yǔ)法的正確性,我的

            Static

            6. 關(guān)鍵字static 的作用是什么?

            這個(gè)簡(jiǎn)單的問(wèn)題很少有人能回答完全。在C 語(yǔ)言中,關(guān)鍵字static 有三個(gè)明顯的作用:

            ?; 在函數(shù)體,一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過(guò)程中維持其值不變。

            ?; 在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn)。它是一個(gè)本地的全局變

            量。

            ?; 在模塊內(nèi),一個(gè)被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個(gè)函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。

            大多數(shù)應(yīng)試者能正確回答第一部分,一部分能正確回答第二部分,同是很少的人能懂得第三部分。這是一個(gè)應(yīng)試者的嚴(yán)重的缺點(diǎn),因?yàn)樗@然

            不懂得本地化數(shù)據(jù)和代碼范圍的好處和重要性。

             

            #define BIT3 (0x1 << 3)

            static int a;

            void set_bit3(void) {

            a |= BIT3;

            }

            void clear_bit3(void) {

             

            a &= ~BIT3;

            }

             

            unsigned int compzero = ~0;

             

             

             

            char * strcpy( char *strDest, const char *strSrc )

            {

            assert( (strDest != NULL) && (strSrc != NULL) );

            char *address = strDest;

            while( (*strDest++ = * strSrc++) != ‘\0’ );

            return address;

            }

            4,21 日,

             

            創(chuàng)建畫刷,和畫筆
            HBRUSH hBrush = GetStockObject(REG(255,0,0);

            呼叫selectObject 將它選進(jìn)設(shè)備內(nèi)容:

            SelectObject (hdc, hBrush) ;

             

            您也可以不定義hPen變量,而將GetStockObjectSelectObject呼叫合并成一個(gè)敘述:

            SelectObject (hdc, GetStockObject (WHITE_PEN)) ;

            如果想恢復(fù)到使用BLACK_PEN的狀態(tài),可以用一個(gè)敘述取得這種畫筆的句柄,并將其選進(jìn)設(shè)備內(nèi)容:

            SelectObject (hdc, GetStockObject (BLACK_PEN)) ;

             

            Windows程序以句柄來(lái)使用畫筆。 Windows表頭文件WINDEF.H中包含一個(gè)叫做HPEN的型態(tài)定義,即畫筆的句柄,可以定義這個(gè)型態(tài)的變量(例如hPen):

            HPEN hPen ;

            呼叫GetStockObject,可以獲得現(xiàn)有畫筆的句柄。例如,假設(shè)您想使用名為WHITE_PEN的現(xiàn)有畫筆,可以如下取得畫筆的句柄:

            hPen = GetStockObject (WHITE_PEN) ;

            現(xiàn)在必須將畫筆選進(jìn)設(shè)備內(nèi)容:

            SelectObject (hdc, hPen) ;   

             

             

             

             case WM_CREARE:

             

             SETIMER(null,1,6000,NULL)

             

            Case WM_LBUTTON:

             要得到窗口顯示區(qū)域的設(shè)備內(nèi)容句柄,可以呼叫GetDC來(lái)取得句柄,在使用完后呼叫 ReleaseDC

            hdc = GetDC (hwnd) ;

            使用GDI函數(shù)

            ReleaseDC (hwnd, hdc) ;

             

            呼叫selectObject 將它選進(jìn)設(shè)備內(nèi)容:

            SelectObject (hdc, hBrush) ;

             

            化線的幾個(gè)函數(shù):

             MoveToEx (hdc, xBeg, yBeg, NULL) ;

            LineTo (hdc, xEnd, yEnd) ;

             

            Case WM_PAIN:

            MoveToEx (hdc, 0, cyClient / 2, NULL) ;

            LineTo (hdc, cxClient, cyClient / 2) ;

            for (i = 0 ; i < NUM ; i++)

            {

            apt[i].x = i * cxClient / NUM ;

            apt[i].y = (int) (cyClient / 2 * (1 - sin (TWOPI * i / NUM))) ;

            }

            Polyline (hdc, apt, NUM) ;

             

             

             

            畫圓:

            Ellipse

            Ellipse (hdc, xLeft, yTop, xRight, yBottom) ;

             

            當(dāng)您要將數(shù)組中的點(diǎn)連接成線時(shí),使用Polyline函數(shù)要簡(jiǎn)單得多。下面這條敘述畫出與上面一段程序代碼相同的矩形:

            Polyline (hdc, apt, 5) ;

             

            畫矩形:

            Rectangle (hdc, 1, 1, 5, 4) ;

             

             

            如果您需要在整個(gè)程序執(zhí)行期間都使用定時(shí)器,那么您將得從WinMain函數(shù)中或者在處理WM_CREATE消息時(shí)呼叫SetTimer,并在退出WinMain或響應(yīng)WM_DESTROY消息時(shí)呼叫KillTimer。根據(jù)呼叫SetTimer時(shí)使用的參數(shù),可以下列三種方法之一使用定時(shí)器。

            方法一

            這是最方便的一種方法,它讓WindowsWM_TIMER消息發(fā)送到應(yīng)用程序的正常窗口消息處理程序中,SetTimer呼叫如下所示:

            SetTimer (hwnd, 1, uiMsecInterval, NULL) ;

            第一個(gè)參數(shù)是其窗口消息處理程序?qū)⒔邮?span>WM_TIMER消息的窗口句柄。第二個(gè)參數(shù)是定時(shí)器ID,它是一個(gè)非0數(shù)值,在整個(gè)例子中假定為1。第三個(gè)參數(shù)是一個(gè)32位無(wú)正負(fù)號(hào)整數(shù),以毫秒為單位指定一個(gè)時(shí)間間隔,一個(gè)60,000的值將使Windows每分鐘發(fā)送一次WM_TIMER消息。

            您可以通過(guò)呼叫

            KillTimer (hwnd, 1) ;

            在任何時(shí)刻停止WM_TIMER消息(即使正在處理WM_TIMER消息)。此函數(shù)的第二個(gè)參數(shù)是SetTimer呼叫中所用的同一個(gè)定時(shí)器ID。在終止程序之前,您應(yīng)該響應(yīng)WM_DESTROY消息停止任何活動(dòng)的定時(shí)器。

            當(dāng)您的窗口消息處理程序收到一個(gè)WM_TIMER消息時(shí),wParam參數(shù)等于定時(shí)器的ID值(上述情形為1),lParam參數(shù)為0。如果需要設(shè)定多個(gè)定時(shí)器,那么對(duì)每個(gè)定時(shí)器都使用不同的定時(shí)器IDwParam的值將隨傳遞到窗口消息處理程序的WM_TIMER消息的不同而不同。為了使程序更具有可讀性,您可以使用#define敘述定義不同的定時(shí)器ID

             

             

            WM_LBUTTONDOWN

             

            里面就有 坐標(biāo)的x y 的值 直接取出來(lái)

             

            定義:
            RECT

             

            POINT

             


             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

            4.21        

             

               今天主要講了一下 mfc 的機(jī)制,和 簡(jiǎn)單的畫圖:

             

            1.切記 加上頭文件:#include<afxwin.H>

            2. 要明白 mfc中的繼承關(guān)系

            3.Cobject--ccmdtarget--cthread---cwinApp----CHellowinapp

            4.Cobject---ccmdtaget--cwnd --cframewnd---

             

             

            Win32 api windows編程中關(guān)于

            1. 設(shè)計(jì)一個(gè)窗口類 winmain WNDCLASS wndcls;

            2. 注冊(cè)一個(gè)窗口類RgeisterClass

            3. 創(chuàng)建一個(gè)窗口類 HWND hwnd

                         Hwnd = createwindow(")

            4. 顯示 和 刷新窗口,ShowWindowhwndSW_SHOWNORMAL

                                 Updatewindowhwnd

            5. 定義消息結(jié)構(gòu)體,開始消息循環(huán):
                    
            MSG msg

            6. While(getMessage(&msg,NULL,0,0)

            {

               

            TranslateMessage(&msg);

            DispatechMessage(&msg):

            }

            7. 編寫窗口過(guò)程函數(shù):
            LRESULT CALLBACK WinSunProc

             

             

             

            幾個(gè)輸出語(yǔ)句:
             sprintf

            case WM_CHAR:

               Char szChar[20];

            Sprintf(szChar,"char code is %d",wparam);

            Messagebox(hwend, szChar,"char",0);

             

            Case WM_LBUTTON:

            MessageBox(hwnd Mouse clicked", "message ",0);

             

            HDC hdc;

            Hdc = GetDC(hwnd);

            TextOut(hdc, 0, 50, "我愛(ài)你", strelen("我愛(ài)你")):

            ReleaseDC(hwnd, hdc);

             

            Case WM_PAINT:

             HDC hDC;

            Paintstruct ps;

            hDC=BeginPaint(hwnd , &ps)

             

            TextOut(hdc,0,0," kkk" ,strlen("kkk"));

             

            EndPaint(hwnd,&ps);

             

             

            今天還了一個(gè)畫圓的例子,大概思路是

            建兩個(gè)類 一個(gè)是CHellownd 繼承的事 CwinApp

             

            還有一個(gè)是 CMainFrame 繼承的事 CFrame

             

            注意在CMainFrameIninInstrance 中的大小寫

            還有事在 設(shè)置里面加入MFC 靜態(tài) 訪問(wèn)

             

            注意:
            CHellownd

            定義了virtual一個(gè) BOOL IninInstrance ()

            Return true

             

            還有事在CHellownd 的構(gòu)造還是

             

            m_pMainWnd = new CMainFrame;

            m_pMainWnd 是在CThread 中定義的事一個(gè)Cwnd 類型的指針,他保存了了應(yīng)用程序框架窗口對(duì)象的指針,也就是說(shuō),是指向CMainFrame 對(duì)象的指針

             

            m_pMainWnd->ShowWindowSW_SHOW);

            m_PMainWnd->UpdageWindow();

             

             

            CMainFrame

            ONPaint()函數(shù) 用于繪制 窗口

             

            還用到一個(gè)ONLBUTTONDOWN UINT flagPOINT point)

            其中POINT 指的是 當(dāng)前坐標(biāo)的位置;

             

            主要代碼:

            一種方法是:

             

            ONLBUTTONDOWN中定義 一個(gè)畫筆一個(gè)化刷,創(chuàng)建一個(gè)矩形,調(diào)用一個(gè)ellipse函數(shù):

            CRect rect;

             

            Int r = rand()%60 +1;

            CClientDc   dc(this);

             

            dc.Rect(point.X-r, point.Y-r, point.X+r, point.Y+r);

             

            調(diào)用系統(tǒng)的化刷:

            HBRUSH hBrush = GetStockObject(WHITE_BRUSH);

            HPEN hPen = GetStockObject(NULL_HPEN):

            創(chuàng)建一個(gè)自己的化刷和畫筆:
            HBRUSH hBrush = CreateStockObject(RGB(255,0,0)):
            HPen hPen = Createpen(CP_SOLID, 1, RGB(0, 0 , 255));

             

            把畫筆和化刷綁定到Hdc

            SelectObject(hDC, hBrush);

            selectObjecthDChPen);

             

            花園:

            Ellipse hDC point.X-r, point.Y-r, point.X+r, point.Y+r);

            還有一種是

             dc.Ellipse(rect);

             

            第一種是在ONPAINT中實(shí)現(xiàn)的;

             

            ONLBUTTONDOWN主要是為了獲得一個(gè)數(shù)組, 在窗口重繪的時(shí)候可以保留

            CMainFrame 中定義一個(gè)數(shù)組和一個(gè)count

             

            #define MAX 100

             

            RECT ARRAY100】;

            Int count

             

            ONLBUTTONDOWN中主要操作時(shí):

             

             

             

             

             

            Static int i=0

            CRect rect;

             

            Int r = rand()%60 +1;

            CClientDc   dc(this);

             

            dc.Rect(point.X-r, point.Y-r, point.X+r, point.Y+r);

             

            ARRAY[i++] = rect;

            Count = i;

            還有一一個(gè)主意

             

            INvalidateRectrect 1);

            是為了觸發(fā)onpaint

            在那個(gè)onpaint 的函數(shù)里面主要是:

             

            CPaintDC dc(this);

             

            For(int j= 0; j< = count:j++)

            {

             

             

            為了獲得一個(gè)各種顏色的化刷,可以定義三個(gè)隨機(jī)的變量:
            int x = rand()%255;

            Int y = rand()% 255;

            Int z -rand()%255

             

            HBRUSH hBrush = CreateStockObject(RGB(x,y,z)):

            調(diào)用系統(tǒng)的化刷:

            HBRUSH hBrush = GetStockObject(WHITE_BRUSH);

            HPEN hPen = GetStockObject(NULL_HPEN):

            創(chuàng)建一個(gè)自己的化刷和畫筆:
            HBRUSH hBrush = CreateStockObject(RGB(255,0,0)):
            HPen hPen = Createpen(CP_SOLID, 1, RGB(0, 0 , 255));

             

            把畫筆和化刷綁定到Hdc

            SelectObject(hDC, hBrush);

            selectObjecthDChPen);

             

            花園:

            Ellipse hDC point.X-r, point.Y-r, point.X+r, point.Y+r);這種不可以

            還有一種是

             dc.Ellipse(rect);

            dc.Ellipse(ARRAY[i]);

             

            }

             

            4.24  

             

               對(duì)話框:

            模態(tài)對(duì)話框:modal

            非模態(tài)對(duì)話框: modeless

             

            Cobject -ccmdtarget-cmd--cdialog

             

            Cproperty and cpropertyPage 是常見屬性頁(yè),和向?qū)?duì)話框:

             

            今天做的第一個(gè)例子 m_length * m_wight = m_area

             

             主意幾點(diǎn):

             1。在創(chuàng)建一個(gè)對(duì)話框之后 用classwizard 創(chuàng)建一個(gè)new class

            并添加相應(yīng)的 m_length 類型是 int 初始化是在構(gòu)造函數(shù)里面一般是m_length =0

            添加的事m_name 類型是 CString 的 初始化一般是 m_name = _T("");

             

            添加相信的 m_length 類型是 Cedit,   Cbutton 或者其他的控件,

             

            注意:是在IninInstrance 中初始化的 m_length.setWindowText(" 1 ");

             

            2.  創(chuàng)建一個(gè)子對(duì)話框 創(chuàng)建相應(yīng)的類CDialog1

            3.  在父類中 創(chuàng)建一個(gè)onbutton 函數(shù),(雙擊Button控件),

                 在里面

               

            UpdateData();

                 CDialog dll;

                 M_area = m_ length * m_weighth;

               如果是在子類的對(duì)話框中顯示:在子類的中創(chuàng)建一個(gè)m_area1的變量

                      dll.M_area1 = m_area

                 dll.DoModal ( );

                

            UpdateDataFALSE);

                                              

            紅色的部分一定要加上 ,切記: 在密碼,和個(gè)人信息匹配中也一定要加上:

             

             

             

             

             

             

            類的更改步驟:

               1,刪除 .C .Cpp

               2. 在文件所建的目錄中招到.C .Cpp 文件進(jìn)行更改;

               3, 在 .Cpp .C 中用replace 替換所有

               4,在頭文件中應(yīng)該改, 在用的地方也要改

             

             

            創(chuàng)建一個(gè)非模態(tài)的對(duì)話框,可以顯示好幾個(gè):

            基本的步驟是:
            1
            ,常見一個(gè) 子對(duì)話框 對(duì)應(yīng)的創(chuàng)建一個(gè)新類: CDialog1

            2, 直接用:

               CDialog1 dll;

                  dll.CreateIDD_IDTEST_DIALOG

                  dll.ShowWindow(SW_SHOWNORMAL);

             只會(huì)顯示一段時(shí)間;

             

            更改:

                  應(yīng)該在父類 (父窗口)中創(chuàng)建一個(gè)子類 CDiaTest *dll

                 

            IninInstrance dll = NULL

             

            OnButton

            If dll == NULL

            {

               Dll = new CDiaTest

            }

            If(! (dll->GetSateHwnd( ))

            {

               dll-- >Create(IDD_ ****, this);

               Dll- >ShowWindow(SW_ SHOWNOARMAL);

            Else

            {

             Dll - > SHOWWIndowSW_SHOWNORMAL

            }

             

                 并且在父類中增加一個(gè)wind 消息響應(yīng)函數(shù):

                    WM_DESATROY

            CTEST::ONDESTORY )

            {

             If( dll ! = NULL

             Delete dll

             Dll = NULL

            }

             

            屬性頁(yè)的基類:不是CDialog而是 CPropertyPage

             

            2,做一個(gè)有兩個(gè)或三個(gè)屬性頁(yè)的對(duì)話框

             先建一個(gè)主的對(duì)話框,在上面添加一個(gè)Onbutton 對(duì)應(yīng)的是:個(gè)人信息;

             

             再建兩個(gè)或三個(gè)屬性頁(yè),如:個(gè)人愛(ài)好,個(gè)人信息,是在Cdialog中選擇倒數(shù)第二個(gè),并選擇C P A ,并建相應(yīng)的類Chabby ,和Cperson

                屬性頁(yè)的基類:不是CDialog而是 CPropertyPage

             

            然后再建一CpersonSheet 繼承CPropertySheet

             

            MSDN 關(guān)于添加屬性頁(yè)的是:

            AddPage CPropertyPage * M)

             

            1,定義兩個(gè)屬性頁(yè)的對(duì)象:

               Cperson m_person

               Chabby m_hobby

            2,在狗仔函數(shù)中的第二個(gè)添加, 也可以在兩個(gè)里面都添加:

                AddPage&m_person)

            AddPage(&m_hobby);

            3,在OnButton

             

             CpersonSheet personinfo(“個(gè)人信息”);

             

            Personinfo.DoModal();

             

            3,做一個(gè)逃跑按鈕:

            注意函數(shù):

             ShowWindowSW_HIDE);

             

            在一個(gè)對(duì)話框上創(chuàng)建兩個(gè)按鈕,m_ButtonDown m_ButtonUp 

            Shuxiang 屬性:CmouseMoveBtn并添加相應(yīng)的圖文件:

             

            創(chuàng)建一個(gè)CMouseMoveBtn 的類 這個(gè)類

            中定一個(gè)

                       CMouseMoveBtn *m_pbtnAnother

                       IninInstrance中初始化

                        指針為NULL

             

             

             

            在在對(duì)話框上CDIALAGIninInstrance

             

            M_ButtonDown.m_pbtnAnother = & m_ButtonUp

            m_ButtonUp. m_pbtnAnother = & M_ButtonDown

             

            CMouseMoveBtn 的類 中選擇WM_CMOUSEMOVE 并產(chǎn)生相應(yīng)的函數(shù):

             

            中添加:

                    This->ShowWindowSW_HIDE

             

            M_pbtnAnoter->ShowWindowSW_HIDE);

            M_pbtnAnoter->ShowWindowSW_HIDE);//好像是:SW_SHOW查一下書

             

            創(chuàng)建一個(gè)個(gè)人信息,密碼的進(jìn)入的對(duì)話框

            步驟:

            1.創(chuàng)建一個(gè)對(duì)話框添加相應(yīng)的組件,并在兩個(gè)編輯框上創(chuàng)建相應(yīng)兩個(gè)變量

            2.CString 的類型 m_name m_mima

            3.在創(chuàng)建一個(gè)對(duì)話框并創(chuàng)建相應(yīng)的類如CDialog1

            4.OnButton
             

             UpdateData();

            CDialog1 dll

            Static int count = 3;

             

            CString t("123456");

            CSring s("guolong");

             

            If(m_mima ! = t)

            {

             MessageBox"密碼不正確“);

             Count--;

            }

            If(count == 0

            {

             EndDialog(IDOK);

            或者CDialog::OnOK()

            }

             

            Ifm_name == s&& m_mima == t

            {

            dll.DoModal();

            }

            UpdateData(FALSE);}

             

             

             

             

             

             

             

             

             

             

            posted on 2010-08-21 17:27 郭龍 閱讀(1125) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久精品国产第一区二区| 青草影院天堂男人久久| 久久久久国产精品嫩草影院| 精品国产一区二区三区久久| 人妻无码αv中文字幕久久| 久久狠狠一本精品综合网| 久久精品国产99国产精偷 | 色综合久久综合网观看| 午夜天堂精品久久久久| 无码精品久久久久久人妻中字| 区久久AAA片69亚洲| 亚洲欧美一级久久精品| 亚洲午夜无码久久久久小说| 人人狠狠综合久久亚洲高清| 久久综合精品国产一区二区三区| 久久精品国产精品亚洲下载| 久久99精品九九九久久婷婷| 久久国产免费直播| 久久综合九色综合久99| 久久成人小视频| 国产成人无码精品久久久性色 | 久久久精品2019免费观看| 亚洲欧美伊人久久综合一区二区| 99久久精品免费看国产一区二区三区 | 亚洲精品tv久久久久久久久久| 久久亚洲天堂| 亚洲日韩中文无码久久| 久久国产乱子精品免费女| 精品人妻伦一二三区久久| 亚洲国产精品一区二区三区久久 | 品成人欧美大片久久国产欧美| 久久精品国产只有精品66| 热久久视久久精品18| 久久婷婷成人综合色综合| 色综合久久88色综合天天| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久综合综合久久97色| 亚洲人AV永久一区二区三区久久| 无码人妻久久一区二区三区免费| 久久精品成人国产午夜| 一本大道久久香蕉成人网 |