⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 predialog.cpp

📁 用户管理系统
💻 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 + -