设为首页 加入收藏

TOP

C++入门学习笔记(十一)
2016-12-06 20:24:46 】 浏览:1913
Tags:入门 学习 笔记
); //取客户区大小

7. Newp.x=recta.right-recta.left;

8. Newp.y=recta.bottom-recta.top;

9. fsp[0]=(float)Newp.x/old.x;

10. fsp[1]=(float)Newp.y/old.y;

11. CRect Rect;

12. int woc;

13. CPoint OldTLPoint,TLPoint; //左上角

14. CPoint OldBRPoint,BRPoint; //右下角

15. HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD); //列出所有控件

16. while(hwndChild)

17. {

18. woc=::GetDlgCtrlID(hwndChild);//取得ID

19. GetDlgItem(woc)->GetWindowRect(Rect);

20. ScreenToClient(Rect);

21. OldTLPoint = Rect.TopLeft();

22. TLPoint.x = long(OldTLPoint.x*fsp[0]);

23. TLPoint.y = long(OldTLPoint.y*fsp[1]);

24. OldBRPoint = Rect.BottomRight();

25. BRPoint.x = long(OldBRPoint.x *fsp[0]);

26. BRPoint.y = long(OldBRPoint.y *fsp[1]);

27. Rect.SetRect(TLPoint,BRPoint);

28. GetDlgItem(woc)->MoveWindow(Rect,TRUE);

29. hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);

30. }

31. old=Newp;

32. } 总结:就个人而言,本人还是比较倾向第二种方法,毕竟可以少操作控件ID,否则少了一个布局都会发生变化。版权声明:本文为博主原创文章,未经博主允许不得转载。28、1.#include #include

void SearchFile(const char* FileName, const char* Path, TStrings* Strings)

{

char *Name;

char File[512];

struct ffblk blk;

strcpy(File, Path);

Name = File+strlen(File);

if (*(Name-1)!='\\') *Name++ = '\\';

strcpy(Name, "*.*");

if (findfirst(File,&blk,FA_RDONLY|

FA_HIDDEN|FA_SYSTEM|FA_DIREC))

return;

do {

strcpy(Name, blk.ff_name);

if (blk.ff_attrib&FA_DIREC) {

if (*Name != '.')

SearchFile(FileName, File, Strings);

}

else if(strcmpi(Name,FileName))

Strings->Add(File);

}while(findnext(&blk)==0);

findclose(&blk); /* 有些编译器没有findclose,这行去掉 */

}

TStringList* SearchFile(const char* FileName)

{

char buf[128];

TStringList* Strings;

Strings = new TStringList;

GetLogicalDriveStrings(128, buf);

for(char* s=buf; *s!=0; s+=strlen(s)+1) {

SearchFile(FileName, s, Strings);

}

return Strings;

} 我原来写过的一个程序中的代码: void __fastcall SearchTxtDocFile::Execute()

{

DWORD AllDrives=GetLogicalDrives();

if (AllDrives==0)

return;

AnsiString Dir;

char d;

for(int i=2; i<26; i++)

{

if (AllDrives & (1<先取的所有盘,然后遍历

- 刚学BCB时写过,你在#codego.net#的软件里找“文件遍历”,有源码

- 29、C++内存分配函数Malloca/alloca:

1、在调用alloca的函数返回的时候,它分配的内存会自动释放。也就是说,用alloca分配的内存在栈上。所以释放不需要用户使用free。

2、alloca不具可移植性,而且在没有传统堆栈的机器上很难实现。当它的返回值直接传入另一个函数时会带来问题,因为他分配在栈上。

总结:由于这些原因,alloca不宜使用在必须广泛移植的程序中,不管它可能多么有用。

Realloca:

重新分配内存并返回void类型,如果没有足够的内存扩展内存块,则原来的指向的内存指针无变化,并返回NULL;如果重新分配大小设为0,而释放原来的内存块,并返回NULL。

Calloc:

分配指定数目的元素,每个元素的大小由size指定,并将其初始化为0,calloc调用malloc使用C++_set_new_mode函数来设置新的处理方式,默认情况下,malloc失败时不调用分配内存的处理程序例程。

Malloc:

从堆上分配指定大小的字节数并返回void类型,如分配失败则返回NULL,malloc分配的字节数可能比指定的字节要多,这是由内存对奇方式决定的,malloc实际上调用了HeapAlloc函数,因此malloc分配的内存也不能跨进程调用。

New:

分配内存的对象或数组类型的对象和返回一个适当类型,并调用对象的构造函数及在delete时调用对象的析构函数。其实现基于malloc调用。

下面是windows系统提供的API函数:

1、VirtualAlloc/VirtualAllocaEx

在虚拟地址空间中保留或提交内存,每次操作大小为Page页大小的整数倍,因此需要自己计算内存分配算法,在没有使用MEM_RESET的情况下会初始化内存块(0),VirtualAllocEx还可以在其他进程中的保留内存操作,并使用其对于的VirtualFree/VirtualFreeEx释放内存。

2.HeapAlloc/HeapFree

在指定的Heap中分配内存,heap应该由CreateHeap或GetProcessHeap返回,分配的内存不能移动,CreateHeap创建的堆只能在调用的进程中使用,因此如需跨进程滴啊用不能使用此种分配方式,由HeapFree释放。

3、GlobalAlloc/GlobalFree

从全局堆分配指定字节的内存,分配的内存可跨进程访问,并使用8字节对齐方式,有GloabalFree释放,在使用GlobalAlloc分配的内存块时需调用GlobalLock和GlobalUnlock函数。

PS:为了更好的理解内存分配,我们可以了解一下内存分区。

1)、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式

首页 上一页 8 9 10 11 下一页 尾页 11/11/11
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数独 约束求解 C++ and Python 下一篇C++面向对象高效编程:数据抽象

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目