首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

请问一个创建窗体的有关问题

2012-02-07 
请教一个创建窗体的问题 - C++ Builder / Windows SDK/API大家好:请教一下,想在窗体中加入一个RichEdit的

请教一个创建窗体的问题 - C++ Builder / Windows SDK/API
大家好:
  请教一下,想在窗体中加入一个RichEdit的控件,用如下的方法创建后,不知道怎样去控制它,我想动态调整它的大小,取得它里面的东西。。。
  hInst = LoadLibrary("riched20.dll");
  HINSTANCE hInst;

  TRect rect = Form1->ClientRect;
  CreateWindowExA(0, "RichEdit20A", "aa", WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP
  |ES_WANTRETURN|ES_MULTILINE,
rect.left, rect.top, Form1->Width, Form1->Height-50,
  Form1->Handle, 0, hInst,0);

先谢谢大家!!

[解决办法]
CreateWindowExA函数返回一个HWND句柄,你需要将这个句柄设成全局的,通过这个句柄来控制你创建的Rich20窗口.
[解决办法]
莫非你的代碼創建的時候出了問題沒有創建成功?
即便不是TRichEdit類型的也不該是空啊
h = CreateWindowExA(.....);//後面加上下面的代碼 看看什麽情況
TControl *ctr = FindControl(h);
if(ctr != NULL)
ShowMessage(ctr->ClassName()); //如果創建成功了 看看是什麽類型的
else
ShowMessage("NULL"); //走到這裡就説明create失敗了
[解决办法]
CreateWindowExA
返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。

http://blog.csdn.net/zjxsq/archive/2008/12/14/3516055.aspx
這裡有函數的詳細説明 

你這個情況應該是這個函數失敗了
不管richEdit是什麽版本 縂應該是TControl類下的 用FindControl應該可以抓到
看看函數返回的是不是空
[解决办法]
//---------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HINSTANCE hInst; 
HWND h;
TRect rect;

//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{

hInst = LoadLibrary("riched20.dll");

rect = Form1->ClientRect;
h =CreateWindowExA(WS_EX_CLIENTEDGE, "RichEdit20A", "test",
WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|
WS_EX_CLIENTEDGE |ES_WANTRETURN|ES_MULTILINE |WS_EX_WINDOWEDGE,
rect.left, rect.top, rect.right, rect.bottom,
Form1->Handle, 0, hInst,0);
}
//---------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
// FreeLibrary(hInst);
}
//---------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
AnsiString st;
rect = Form1->ClientRect;
SetWindowPos(h, HWND_TOP, rect.left, rect.top, rect.right, rect.bottom-StatusBar1->Height,
SWP_FRAMECHANGED|SWP_SHOWWINDOW);

GetWindowText(h, st.c_str(), 255);
SendMessage(Form1->StatusBar1->Handle, SB_SETTEXT, 0, (int)st.c_str());
}
//---------------------------------------

[解决办法]
设置大小 SetWindowPos(

取得文本 GetWindowText(

这样不是就可以了?


[解决办法]
// Borland C++ Builder
// Copyright (c) 1995, 2005 by Borland Software Corporation
// All rights reserved

// (DO NOT EDIT: machine generated header) 'Classes.pas' rev: 10.00



#ObjectResourceToText(TStream* Input, TStream* Output, TStreamOriginalFormat &OriginalFormat)/* overload */;
extern PACKAGE void __fastcall ObjectTextToResource(TStream* Input, TStream* Output)/* overload */;
extern PACKAGE void __fastcall ObjectTextToResource(TStream* Input, TStream* Output, TStreamOriginalFormat &OriginalFormat)/* overload */;
extern PACKAGE TStreamOriginalFormat __fastcall TestStreamFormat(TStream* Stream);
extern PACKAGE bool __fastcall CheckSynchronize(int Timeout = 0x0);
extern PACKAGE void * __fastcall MakeObjectInstance(TWndMethod Method);
extern PACKAGE void __fastcall FreeObjectInstance(void * ObjectInstance);
extern PACKAGE HWND __fastcall AllocateHWnd(TWndMethod Method);
extern PACKAGE void __fastcall DeallocateHWnd(HWND Wnd);

}/* namespace Classes */
using namespace Classes;
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------
#endif// Classes
[解决办法]
前面已经给了例子啊
可查一下BCB带的Win32 Programmer's Reference 帮助文件

void __fastcall TForm1::FormResize(TObject *Sender) 

AnsiString st; 
rect = Form1->ClientRect; 
SetWindowPos(h, HWND_TOP, rect.left, rect.top, rect.right, rect.bottom-StatusBar1->Height, 
SWP_FRAMECHANGED|SWP_SHOWWINDOW); 
// 这个重新设置RichEdit的大小 

GetWindowText(h, st.c_str(), 255); // 这个取得文本
SendMessage(Form1->StatusBar1->Handle, SB_SETTEXT, 0, (int)st.c_str()); 


热点排行