MFC/VC基础篇

 

//创建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文件

//

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值