📄 predialog.cpp
字号:
// CPreDialog.cpp: implementation of the CPreDialog class.
//生成模板窗口、并枚举所有控件信息
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "..\Print.h"
#include "PreDialog.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPreDialog::CPreDialog()
{
m_pDataWindow = NULL;
m_pDialog = NULL;
m_strFileName = _T("");
m_strReport = _T("");
m_strSQL = _T("");
}
CPreDialog::~CPreDialog()
{
if(m_pDataWindow) fnDelClassChild();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
// 枚举窗口回调函数
BOOL CALLBACK CPreDialog::fnEnumWndProc(HWND hWnd, LPARAM lParam)
{
fnCreateClassChild(hWnd,(void *)lParam);// 枚举子窗体
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
//枚举所有控件
BOOL CPreDialog::fnEnumControl()
{
fnDelClassChild(); //删除表连
HWND hWnd = m_pDialog->GetSafeHwnd();
/////////////////////////////////////////
//注意:这里传送[指针的指针]给枚举函数
//函数直接把DataWin中的子窗口属性
//写入m_pDataWindow表中,
//不想通过信息传递来实现
/////////////////////////////////////////
DATAWINDOWVIEW **p = &m_pDataWindow;
EnumChildWindows(hWnd, fnEnumWndProc, (LPARAM)p);
return TRUE;
}
///////////////////////////////////////////
//枚举窗口的控件生成表连
PDATAWINDOWVIEW WINAPI CPreDialog::fnCreateClassChild(HWND hWnd, void * lParam)
{
DWORD dwStyle;//, dwType;
PDATAWINDOWVIEW pCxp;
//链首
DATAWINDOWVIEW **pBoot = (DATAWINDOWVIEW **)lParam;
if (fnGetClassChild(*pBoot, hWnd) == NULL)
{
dwStyle = GetWindowLong(hWnd, GWL_STYLE);
// 分配存储空间,增加一个节点
pCxp = (PDATAWINDOWVIEW) HeapAlloc(GetProcessHeap(), 0, sizeof(DATAWINDOWVIEW));
if(pCxp == NULL)return NULL;
memset(pCxp, 0, sizeof(DATAWINDOWVIEW));
pCxp->pNext = *pBoot;
*pBoot = pCxp;
pCxp->hWnd = hWnd; //保存句柄
pCxp->dwStyleEx = GetWindowLong(hWnd, GWL_EXSTYLE);//扩展样式
pCxp->dwStyle = dwStyle; //样式
::GetClassName(hWnd, pCxp->szType, PND_MAX_NAME); //类型
::GetWindowRect(hWnd, &pCxp->Rect); //位置
::GetWindowText(hWnd, pCxp->szName, PND_MAX_NAME); //名称
pCxp->nID = ::GetDlgCtrlID(hWnd);
// ::SendMessage(hWnd,WM_SETREDRAW,FALSE,0);//隐藏
}
return NULL;
}
////////////////////////////////////////////////////////
//取一个子窗口
PDATAWINDOWVIEW CPreDialog::fnGetClassChild(PDATAWINDOWVIEW pDataWindow,
HWND hWnd, char *szType)//dwType=0表示乎略
{
PDATAWINDOWVIEW pChild;
for (pChild = (PDATAWINDOWVIEW )pDataWindow; pChild != NULL; pChild=pChild->pNext)
if (pChild->hWnd == hWnd || lstrcmpi(pChild->szType, szType)==0)
return pChild;
return NULL;
}
////////////////////////////////////////////////////////////////
//删除所有链表
BOOL CPreDialog::fnDelClassChild()
{
PDATAWINDOWVIEW pDel = NULL;
BOOL bFound = FALSE;
// 循环查找待删除节点的上一个节点
pDel = m_pDataWindow;
// 获取待删除的节点指针
if(pDel != NULL)
{
// 如果待删除的节点就是 m_pDataWindow 节点
if (pDel == m_pDataWindow)
{
m_pDataWindow = pDel->pNext;
}
HeapFree(GetProcessHeap(), 0, pDel);
pDel = m_pDataWindow;
bFound = TRUE;
}
return bFound;
}
BOOL CPreDialog::Enum(CDialog *pDlg)
{
if(!pDlg) return FALSE;
m_pDialog = pDlg;
// m_pDialog = new CDialog;
// if(!m_pDialog->Create(nID)) return FALSE;
if(m_pDataWindow) fnDelClassChild();
// m_pDialog->GetWindowText(m_strSQL);
GetWindowRect(m_pDialog->GetSafeHwnd(),m_Rect);
fnEnumControl(); //枚举所有子窗口
//删除
// m_pDialog->DestroyWindow();
// delete m_pDialog;
// m_pDialog = NULL;
return TRUE;
}
BOOL CPreDialog::LoadFile(LPCSTR lpFileName, LPCSTR lpReport)
{
return TRUE;
}
BOOL CPreDialog::SaveFile(LPCSTR lpFileName, LPCSTR lpReport)
{
return TRUE;
}
PDATAWINDOWVIEW CPreDialog::GetControl()
{
return m_pDataWindow;
}
LPCSTR CPreDialog::GetSQL()
{
return m_strSQL;
}
LOGFONT *CPreDialog::GetFont()
{
return &m_Font;
}
void CPreDialog::GetRect(CRect &Rect)
{
Rect = m_Rect;
}
void CPreDialog::Release()
{
fnDelClassChild();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -