用Formview 建立的项目。怎样能得到控件在窗口上的位置?
我想在创建窗口时将控件生成在我指定的位置,怎样做 ??
我想在创建窗口时将控件生成在我指定的位置,怎样做 ??
解决方案 »
- 求编程插件
- 将CS的dll封装成BS的OCX,需要哪些步骤(及内部简单原理)?
- 如何使VC中的工具栏按钮(最好含文字)的大小可以随窗口大小的改变而改变
- 急找MFC的CListCtrl源文件
- 我用一个Webbrowser控件,加载一个页面。
- VC 如何实现给手机发送短信息
- 求《深入浅出MFC(第二版)》的简体中文
- 如何用ShellExecute打开一个应用程序?
- 请问哪里有翻译质量好一点的MFC中文帮助?请赐教!!!高分敬谢!!!!
- 如何获取桌面上所有的图标以及图标的名字呢?
- 如何把一个二维数组中的数据写到文本文件(txt)中?如何再反向操作,将数据读出?
- 使用UltraEdit编辑C程序有什么好处呢?!:D 请各位多多指教!
m_b1.GetClientRect(&rc); //取得按钮的矩形位置
m_b1.ClientToScreen(&rc); //将客户区坐标转变为屏幕坐标
// m_b1是这个控件变量;
SetWindowPos(..);
or
MoveWindow(..);
or
有的Create函数中可以指定位置;(因控件而定)
CWnd *pWnd;
CRect tect;
pWnd = GetDlgItem(你的控件ID);
pWnd->GetWindowRect(&rect);
设置控件的位置:
MoveWindow()
HWND hWnd, // handle to window
LPRECT lpRect // client coordinates
);BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);ok
也可以移動位置.
ScreenToClient()
MoveWindow()
OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
{
//Set the position of your control according to your client
//rect,you can get it from lpwndpos.
//Width: lpwndpos->cx
//Height: lpwndpos->cy
}
作者:bzshow读者层次: VC初学者在资源编辑器里我们可以方便地在对话框中加入所需控件,比如文本编辑框、列表控件等。但假如我们需要在运行期间动态生成这些控件该怎么做呢?本文就是讲述用代码动态添加控件的方法,并提供示例工程。下载示例工程 12.5K
http://www.vckbase.com/document/journal/vckbase11/src/DynCreateCtrl.zip程序运行界面如下
为了方便演示,我们先生成一个基于对话框的MFC工程,起名为My在CMyDlg.h中做下面几个步骤:
public:
//加上这个变量
CEdit m_MyEdit;
protected:
//加上这个函数, 用来响应编辑框改变的事件
afx_msg void OnChangeEdit();
在CMyDlg.cpp中做下面几个动作:
//增加这一行,为该编辑框设定ID为1820
#define ID_MYEDT 1820
在BEGIN_MESSAGE_MAP(CMyDlg, CDialog)下面加入
ON_EN_CHANGE(ID_MYEDT, OnChangeEdit)
添加这一句的作用是将编辑控件内容改变的消息映射到OnChangeEdit函数,你要在CMyDlg.cpp中实现OnChangeEdit()函数;
好了,让我们动态生成控件吧! m_MyEdit.CreateEx(WS_EX_CLIENTEDGE, // 3D-border外观
_T("EDIT"),
NULL,
ES_AUTOHSCROLL | ES_LEFT | ES_NOHIDESEL | WS_CHILD,
rect, this,
ID_MYEDT);//生成edit控件
m_MyEdit.ShowWindow(SW_SHOW); //显示控件
m_MyEdit.SetFocus(); //设置焦点//动态删除可以用如下语句
GetDlgItem(ID_MYEDT)->DestroyWindow();//销毁控件 在代码中我们只演示了编辑控件的动态生成方法,其它控件动态生成的方法基本一致,都可以参考这一过程。
0,reposQuery,rcClientNew);这一句不动有人知道吗?
if(!m_wndToolBar.Create(this, WS_VISIBLE|CBRS_ALIGN_TOP|CBRS_GRIPPER)|| !m_wndToolBar.LoadToolBar(IDR_TOOLBAR))
{
TRACE0("failed to create dialog toolbar!\n");
EndDialog(0);
}
m_wndToolBar.ModifyStyle(0,TBSTYLE_FLAT);
CRect rcClientOld;
CRect rcClientNew;
GetClientRect(&rcClientOld); RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,
0,reposQuery,rcClientNew);
CPoint ptOffset(rcClientNew.left-rcClientOld.left,
rcClientNew.top-rcClientOld.top); CRect rcChild;
CWnd* pwndChild = GetWindow(GW_CHILD); //得到子窗口
while(pwndChild) // 处理所有子窗口
{//移动所有子窗口
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild,FALSE);
pwndChild = pwndChild->GetNextWindow();
} CRect rcWindow;
GetWindowRect(rcWindow); // 得到对话框RECT
rcWindow.right += rcClientOld.Width() - rcClientNew.Width(); // 修改对话框尺寸
rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height();
MoveWindow(rcWindow,FALSE); // Redraw Window RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);