MFC/VC基礎篇

來源:互聯網
上載者:User
 

//建立EDIT

int ix1 = 880, ix2 = 1050;
CRect   editrect1(ix1,123,ix2,150);  
m_simocx_edit1.Create(ES_CENTER|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP|WS_GROUP |WS_EX_DLGMODALFRAME   ,editrect1,this,IDC_SIMOCX_EDIT1);  
m_simocx_edit1.ShowWindow(SW_SHOW);

//建立ScrollBar

CRect   RightScrollbarRect(790,100,815,600);
m_simocx_RightScrollbar.Create(SBS_VERT |SBS_BOTTOMALIGN | WS_CHILD, RightScrollbarRect, this,IDC_SIMOCX_SCROLLBAR1);
m_simocx_RightScrollbar.ShowScrollBar();
// m_simocx_scrollbar1.SetScrollRange(-50,150);
SCROLLINFO RightLpinfo;//= SCROLLINFO;
RightLpinfo.nMax=150;
RightLpinfo.nMin=-50;
RightLpinfo.cbSize=10;
RightLpinfo.nPage=(RightLpinfo.nMax-RightLpinfo.nMin)/2;
RightLpinfo.fMask =SIF_ALL;  
m_simocx_RightScrollbar.SetScrollInfo(&RightLpinfo,TRUE);;

 

//分割視窗

CRect rtLine;
GetDlgItem(IDC_STATIC_LINE)->GetWindowRect(rtLine);
CRect rtDlg;
GetWindowRect(rtDlg);
SetWindowPos(&wndTop,300,220,rtDlg.Width(),rtLine.top,SWP_NOMOVE);

CString str;
if(GetDlgItemText(IDC_BUTTON_DLSZ, str), str == "收縮<<")
{
   SetDlgItemText(IDC_BUTTON_DLSZ,"擴充>>");
}
else
{
   SetDlgItemText(IDC_BUTTON_DLSZ,"收縮<<");
}

static CRect rectLarge;
static CRect rectSmall;

if(rectLarge.IsRectNull())
{
   CRect rectSeparator;
   GetWindowRect(&rectLarge);
   GetDlgItem(IDC_STATIC_LINE)->GetWindowRect(&rectSeparator);
  
   rectSmall.left=rectLarge.left;
   rectSmall.top=rectLarge.top;
   rectSmall.right=rectLarge.right;
   rectSmall.bottom=rectSeparator.bottom;
}
if(str=="收縮<<")
{
   SetWindowPos(NULL,0,0,rectLarge.Width(),rectSmall.Height(),
    SWP_NOMOVE | SWP_NOZORDER);
}
else
{SetWindowPos(NULL,0,0,rectSmall.Width(),rectLarge.Height(),
SWP_NOMOVE | SWP_NOZORDER);
}

、、、、、、、、、、、、、、、、、、、、、、、、、

//////////////////////////////////////////////////////////////////////////////////

//設定Edit顏色

CDC * pDC

case CTLCOLOR_EDIT:
   pDC->SetBkColor(RGB(0,0,0));
   pDC->SetTextColor(RGB(255,255,255));

   HBRUSH B = CreateSolidBrush(0); //COLOR是你想設定的顏色

   return B;
}

pDC->SetTextColor(RGB(255,255,255));

 

///////////////////////////////////////////////////////////////三種參數傳遞方式///////////////////

#include <iostream>

void swap1(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void swap2(int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}

void swap3(int* x,int* y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
int main()
{
int a=2,b=3;
swap1(a,b);
cout<<"a="<<a<<" "<<"b="<<b<<endl;
swap2(a,b);
cout<<"a="<<a<<" "<<"b="<<b<<endl;
a=2;
b=3;
swap3(&a,&b);
cout<<"a="<<a<<" "<<"b="<<b<<endl;
return 0;
}

以上為三種傳遞參數的方式:

1:值傳遞 swap1()

2:引用傳遞 swap2()

3:指標傳遞 swap3()

值傳遞只是簡單的返回一個值,而要在函數中返回多個改變了的值就要用引用傳遞和指標傳遞。在調用引用作為形參的函數,進行形實結合時,實參的地址和對應的引用參數的地址是一樣的,所以你對形參的操作實際上在對實參進行操作,你操作了幾個引用形參,就可以得到幾個改變了的值,這點很有用,可以用引用調用得到很多改變了的值。(想一想,你怎麼在調用函數時改變多個值?用值傳遞能嗎?)在程式中,引用調用函式宣告必須在形參前加上&,而在調用時和普通函數調用一樣,實參就是你聲明的變數。指標傳值聲明函數時在變數前加*,調用函數時參數必須是地址。個人感覺指標調用和引用調用沒多大區別,唯一的區別是引用傳值時實參的地址就是形參,指標傳值時,形參是指向實參的。但這兩種方式都能得到多個改變了的值,形參和實參是有地址上的聯絡的。只是函式宣告和調用時的形式不一樣而已。值傳遞只能得到一個改變了的值,形參和實參沒有任何地址上的關係,調用時僅僅是用實參初始化形參,讓形參有一個值而已,然後形參和實參就沒有任何關係了,對形參的操作也不會影響到實參。這個很簡單,相信你也很清楚,我就不贅述了。
另外說一下,引用調用是C++的特性,C中是沒有引用調用的。如果你的環境是VC,在建立源檔案時如果不指定副檔名,預設的是.CPP,所以你可以進行引用調用,但如果你指定副檔名是.C,就不能用引用調用了。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
  其中::SetCursor()是全域函數,用來設定整個常式的游標參數是宏定義游標控制代碼。AfxGetApp ()是一個系統函數,它返回當前的一個CWinApp對象。其成員函數LoadStandardCursor()用來讀取一個系統指標,每一種系統指標的具體宏定義如下:
IDC_APPSTARTING 帶小沙漏的標準箭頭
IDC_ARROW 標準箭頭
IDC_CROSS 十字游標(用於定位)
IDC_HAND Windows 2000:手型
IDC_HELP 帶問號的箭頭
IDC_IBEAM I型標
IDC_ICON Obsolete for applications marked version 4.0 or later.
IDC_NO   禁止符號
IDC_SIZE Obsolete for applications marked version 4.0 or later. Use IDC_SIZEALL.
IDC_SIZEALL 十字箭頭
IDC_SIZENESW 指向東北和西南的雙向箭頭
IDC_SIZENS 指向南和北的雙向箭頭
IDC_SIZENWSE 指向西北和東南的雙向箭頭
IDC_SIZEWE 指向東西的雙向箭頭
IDC_UPARROW 上箭頭
IDC_WAIT 沙漏

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

WSADATA wsaData;
char name[155];//用來存放電腦名稱
char *ip;//用來存放IP地址

PHOSTENT hostinfo;
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 )
{
   if( gethostname ( name, sizeof(name)) == 0)
   {
    if((hostinfo = gethostbyname(name)) != NULL)
    { //這些就是獲得IP的函數
     ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
    }
   }
}


#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")

然後在把上面的標頭檔添加到StdAfx.h中

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

一:載入讀取xml檔案的動態庫

#import "MSXML4.DLL"

二:

// 建立對象
CoInitialize(NULL); // 初始化COM
// 建立解析器執行個體
MSXML2::IXMLDOMDocumentPtr spXMLDOM;
HRESULT hr = spXMLDOM.CreateInstance(__uuidof(MSXML2::DOMDocument));

BSTR bstrItemText;
CString strbuf;

// spXMLDOM->put_async(VARIANT_FALSE);
// spXMLDOM->put_validateOnParse(VARIANT_FALSE);
// spXMLDOM->put_resolveExternals(VARIANT_FALSE);
// spXMLDOM->put_preserveWhiteSpace(VARIANT_TRUE);
//
CString strpath1 = "E://工作//工作測試工程//xmltest//hero.xml";
BSTR path = strpath1.AllocSysString();
// 裝載XML文檔。
hr=spXMLDOM->load(path);

// 1、讀取裡面全部文本
spXMLDOM->get_text(&bstrItemText); // new
strbuf = bstrItemText;             // new
// 2、讀取一個節點
_bstr_t bstrname("heros/hero/name");
_bstr_t bstrlegend("heros/hero/legend");
MSXML2::IXMLDOMNodeListPtr spname = NULL;
spname=spXMLDOM->getElementsByTagName(bstrname); //搜尋"Paragrah"是否正確的得到了指向IDOMNodeList的指標。

MSXML2::IXMLDOMNodeListPtr splegend = NULL;
splegend = spXMLDOM->getElementsByTagName(bstrlegend);

long value;
hr = spname->get_length(&value); //得到所包含的NODE節點的個數
CString bufnaem[10];
CString buflegend[10];

if(SUCCEEDED(hr))
{
   spname->reset();
   splegend->reset();
   for(int ii=0; ii<value; ii++)
   {
    // CComPtr<IXMLDOMNode> spParagraph;
    MSXML2::IXMLDOMNode *pname = NULL;//定義一個結點對象
    //得到具體的一個NODE節點
    spname->get_item(ii,&pname);
    MSXML2::IXMLDOMNode *plegend = NULL;
    splegend->get_item(ii,&plegend);
   
    _bstr_t strItemName = pname->Gettext(); //得到NAME值分解
    bufnaem[ii] = (LPCSTR)strItemName;
    _bstr_t stritmelegend = plegend->Gettext();
    buflegend[ii] = (LPCSTR) stritmelegend;
   }      
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

一:建立dll工程選擇MFC extension DLL

該模式沒有.h檔案,如果dll中函數多的話可以添加一個.h檔案

在裡面定義函數格式如下

extern "C" _declspec(dllexport) int sum(int a,int b);

在.cpp檔案裡執行如下

extern "C" _declspec(dllexport)int sum(int a, int b)
{
return a+b;
}

二:編譯運行

在debug裡產生.dll和.lib檔案

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.