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