left of '->hParent' must point to class/struct/union/generic type 什么意思?

_山有木兮 2011-10-23 11:34:17
.h文件
#pragma once
#include "afxcmn.h"


// CsecondDlg 对话框
class CsecondDlg : public CDialog
{
// 构造
public:
CsecondDlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据
enum { IDD = IDD_SECOND_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持


// 实现
protected:
HICON m_hIcon;

// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CTreeCtrl m_treeDemo;
public:
CSliderCtrl m_sldPercent;
public:
CSliderCtrl m_sldInterval;
public:
// afx_msg void OnNMCustomdrawProgressDemo(NMHDR *pNMHDR, LRESULT *pResult);
public:
CProgressCtrl m_progDemo;
public:
afx_msg void OnTvnEndlabeleditTreeDemo(NMHDR *pNMHDR, LRESULT *pResult);
public:
afx_msg void OnBnClickedButtonprogressdemo();
public:
CImageList m_ImageList;
public:
// @@@@@@@@@@@@@@@@@@@自定义函数
void InitialTreeDemo(void);
};


.cpp文件
#include "stdafx.h"
#include "second.h"
#include "secondDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW

#endif
CString chArrTreeContent[]=
{
_T("root"),
_T("parent1"),
_T("child11"),
_T("child12"),
_T("parent2"),
_T("child21"),
_T("child22"),
_T("child23"),
};


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// 对话框数据
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CsecondDlg 对话框




CsecondDlg::CsecondDlg(CWnd* pParent /*=NULL*/)
: CDialog(CsecondDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CsecondDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE_DEMO, m_treeDemo);
DDX_Control(pDX, IDC_SLIDER_PERCENT, m_sldPercent);
DDX_Control(pDX, IDC_SLIDER_INTERRVAL, m_sldInterval);
DDX_Control(pDX, IDC_PROGRESS_DEMO, m_progDemo);
}

BEGIN_MESSAGE_MAP(CsecondDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
// ON_NOTIFY(NM_CUSTOMDRAW, IDC_PROGRESS_DEMO, &CsecondDlg::OnNMCustomdrawProgressDemo)
ON_NOTIFY(TVN_ENDLABELEDIT, IDC_TREE_DEMO, &CsecondDlg::OnTvnEndlabeleditTreeDemo)
ON_BN_CLICKED(IDC_BUTTONPROGRESSDEMO, &CsecondDlg::OnBnClickedButtonprogressdemo)
END_MESSAGE_MAP()


// CsecondDlg 消息处理程序

BOOL CsecondDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。
m_sldPercent.SetRange(1,50);
m_sldPercent.SetPos(5);
m_sldInterval.SetRange(0,10);
m_sldInterval.SetPos(1);
m_progDemo.SetRange(0,100);
//imagelist
m_ImageList.Create(16,16,FALSE,3,0);
m_ImageList.Add(LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ROOT)));
m_ImageList.Add( LoadIcon( AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_PARENT)));
m_ImageList.Add(LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_CHILD)));
//树控件初始化
m_treeDemo.SetImageList(&m_ImageList,TVSIL_NORMAL);
InitialTreeDemo();
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

void CsecondDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。

void CsecondDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CsecondDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}



void CsecondDlg::OnTvnEndlabeleditTreeDemo(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
m_treeDemo.SetItemText(pTVDispInfo->item.hItem,pTVDispInfo->item.pszText);
*pResult = 0;
}

void CsecondDlg::OnBnClickedButtonprogressdemo()
{
// TODO: 在此添加控件通知处理程序代码
int nPercent,nlnterval,nCurPos=0;
nPercent=m_sldPercent.GetPos();
nlnterval=m_sldInterval.GetPos();
m_progDemo.SetPos(0);
while((nCurPos+=nPercent)<100)
{
m_progDemo.OffsetPos(nPercent);
Sleep(1000*nlnterval/10);
}
m_progDemo.SetPos(100);
}

// @@@@@@@@@@@@@@@@@@@自定义函数
void CsecondDlg::InitialTreeDemo(void)
{
HTREEITEM hItem0,hItem1,hItem2;
//增加节点 root
TVINSERTRUCT tvItem;
tvItem.hParent=NULL;
tvItem.hInsertAfter=TVI_LAST;
tvItem.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvItem.item.pszText=(LPTSTR)(LPCTSTR)chArrTreeContent[0];
tvItem.item.iImage=tvItem.item.iSelectedImage=0;
hItem0=m_treeDemo.InsertItem(&tvItem);
//增加root的两个子节点:parent1,parent2
tvItem.hParent=hItem0;
tvItem.item.iImage=tvItem.item.iSelectedImage=1;
tvItem.item.pszText=(LPTSTR)(LPCTSTR)chArrTreeContent[1];
hItem1=m_treeDemo.InsertItem(&tvItem);
tvItem.item.pszText=(LPTSTR)(LPCTSTR)chArrTreeContent[4];
hItem2=m_treeDemo.InsertItem(&tvItem);
//增加parent1的子节点child11,child12
tvItem.item.iImage=tvItem.item.iSelectedImage=2;
tvItem.hParent=hItem1;
tvItem.item.pszText=(LPTSTR)(LPCTSTR)chArrTreeContent[2];
m_treeDemo.InsertItem(&tvItem);
tvItem.item.pszText=(LPTSTR)(LPCTSTR)chArrTreeContent[3];
m_treeDemo.InsertItem(&tvItem);
//增加怕人他的子节点:child21,child22,child23
tvItem.item.iImage=2;
tvItem.hParent=hItem2;
tvItem.item.pszText=(LPTSTR)(LPCTSTR)chArrTreeContent[5];
m_treeDemo.InsertItem(&tvItem);
tvItem.item.pszText=(LPTSTR)(LPCTSTR)chArrTreeContent[6];
m_treeDemo.InsertItem(&tvItem);
tvItem.item.pszText=(LPTSTR)(LPCTSTR)chArrTreeContent[7];
m_treeDemo.InsertItem(&tvItem);







}
红色的都是这个问题!
...全文
490 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
_山有木兮 2011-11-17
  • 打赏
  • 举报
回复
原来没有添加三个图标资源 所以就找不到这几个ID了
_山有木兮 2011-10-23
  • 打赏
  • 举报
回复
是不是
这句 TVINSERTRUCT tvItem;
中未声明而导致tvItem变量不是类对象?
而这个TVINSERTRUCT又怎么声明?
来个人呀..
_山有木兮 2011-10-23
  • 打赏
  • 举报
回复
是不是
这句 TVINSERTRUCT tvItem;
中未声明而导致tvItem变量不是类对象?
而这个TVINSERTRUCT又怎么声明?
_山有木兮 2011-10-23
  • 打赏
  • 举报
回复
'TVINSERTRUCT' : undeclared identifier
sb3day 2011-10-23
  • 打赏
  • 举报
回复
这个变量没有定义,找不到.
->改成.试下或者是没有include
_山有木兮 2011-10-23
  • 打赏
  • 举报
回复
commctrl.h文件?
oyljerry 2011-10-23
  • 打赏
  • 举报
回复
包含commctrl.h文件
_山有木兮 2011-10-23
  • 打赏
  • 举报
回复
我学MFC没多久 请高手帮忙.
gameslq 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sstya 的回复:]
是不是
这句 TVINSERTRUCT tvItem;
中未声明而导致tvItem变量不是类对象?
而这个TVINSERTRUCT又怎么声明?
来个人呀..
[/Quote]
对,找不到结构TVINSERTRUCT的定义,应该加上头文件
#include  <commctrl.h>

BOOL ControlsInitialization(HWND hWnd);//从控件句柄初始化 void ObjectInitialization(CComPtr pDisp);//对象初始化 CString TenToHtmlColor(DWORD CurColor);//将整数型的颜色值转换为网页支持的格式 void WebComplete(HWND hWnd,int Timedelay=0/*单位:毫秒 为空则一直等待*/);//确认网页已经完全载入 HWND GetIesHandle(HWND hWnd);//可以指定父句柄获取IES句柄 BOOL GetAllIesHandle(HWND hParent);//获取所有取已打开的所有网页窗口句柄 CArray m_hWnd;//返回的所有已打开窗口句柄数组 int WebpageNavigate(CString Strurl);//载入某个网址。 int WebpageWriteTextStream(CString StrTextStream);//写超文本流。 CComPtr GetWebpageObject();//取网页对象 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页框架(frame)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页按钮(Button)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int ButGetIndex(CString NameOrID);//按钮取索引返回第一个满足条件的索引值,如果失败返回0 CString GetButName(int i);//获取指定索引按钮元素name(名称) CString GetButId(int i);//获取指定索引按钮元素id int GetButCount();//返回网页内所有按钮的数目 int ButClick(int i);//按钮按索引点击成功返1失败返回0 CString GetButHtml(int i);//获取指定索引按钮元素代码 CString GetButText(int i);//获取指定索引按钮元素文本 CComPtr Object_GetButObject(int i);//获取指定索引按钮对象 CString GetButValue(int i);//获取指定索引按钮标题 CString GetButType(int i);//获取指定索引按钮(Button)的类型(type),“button”、“submit”、“reset” /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页Div~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int GetDivCount();//返回网页内所有Div的数目 CComPtr Object_GetDivObject(int i);//获取指定索引DIV对象 CString GetDivHtml(int i);//获取指定索引Div元素代码 CString GetDivText(int i);//获取指定索引Div元素文本 CString GetDivName(int i);//获取指定索引Div元素name(名称) CString GetDivId(int i);//获取指定索引Div元素id int GetDivIndex(CString NameOrID);////Div取索引返回第一个满足条件的索引值,如果失败返回0 int DivClick(int i);//Div按索引点击成功返1失败返回0 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页隐藏表单(hidden)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int GetHiddenCount();//返回网页内所有隐藏表单的数目 CString GetHiddenName(int i);//获取指定索引隐藏表单元素name(名称) CString GetHiddenId(int i);//获取指定索引隐藏表单元素id CString GetHiddenValue(int i);//获取指定索引隐藏表单元素标题 int GetHiddenIndex(CString NameOrID);////隐藏表单取索引返回第一个满足条件的索引值,如果失败返回0 CComPtr Object_GetHiddenObject(int i);//获取指定索引隐藏表单对象 CString GetHiddenHtml(int i);//获取指定索引隐藏表单元素代码 CString GetHiddenText(int i);//获取指定索引隐藏表单元素文本 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页表格(table)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int GetTableCount();//返回网页内所有表格的数目 CString GetTableName(int i);//获取指定索引表格元素name(名称) CString GetTableId(int i);//获取指定索引表格元素id int GetTableIndex(CString NameOrID);//表格取索引返回第一个满足条件的索引值,如果失败返回0 CString GetTableHtml(int i);//获取指定索引表格元素代码 CString GetTableText(int i);//获取指定索引表格元素文本 int GetTableCellCount(int i);//获取指定索引表格单元格数量 int GetTableRowCount(int i);//获取指定索引表格的行数 CString GetTableDistributionCount(int i);//返回文本格式:“第1行x列,第2行x列,…,第N行x列” CComPtr Object_GetTableCellObject(int i,int row, int j);//获取单元格元素接口(第一个参数指定第几个表格,第二个参数指定第几行,第三个参数指定第几个单元格) CString GetTableCellText(int i,int row, int j);//获取单元格文本(第一个参数指定第几个表格,第二个参数指定第几行,第三个参数指定第几个单元格) CString GetTableCellHtml(int i,int row, int j);//获取单元格源码(第一个参数指定第几个表格,第二个参数指定第几行,第三个参数指定第几个单元格) CComPtr Object_GetTableObject(int i);//获取指定索引表格对象 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页图片~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ CString GetImageName(int i);//获取指定索引图片元素name(名称) CString GetImageId(int i);//获取指定索引图片元素id int ImageClick(int i);//图片按索引点击成功返1失败返回0 int GetImageIndex(CString NameOrID);////图片取索引返回第一个满足条件的索引值,如果失败返回0 int GetImageCount();//返回网页内所有图片的数目 CString GetImageHref(int i);//获取指定索引图片连接地址 CString GetImageSrc(int i);//获取指定索引图片地址 CBitmap *GetImage(int i=NULL, CString vImageIDorName=NULL,int cx=NULL/*图片宽度*/,int cy=NULL/*图片高度*/);//参数1获取指定索引图片如果为NULL请指定参数2的图片Id或Nname /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页单选框(radio)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ BOOL GetRadioChecked(int i);//检查单选框(radio)是否被选中(checked),1为选中,0为未选中 BOOL SetRadioWhetherSelect(int i,int Select);//设置单选框(radio)选中状态,第一个参数填写第几个单选框(radio)第二个添写是否选中(1为选中,0为未选中) CString GetRadioName(int i);//获取指定索引单选框(radio)元素name(名称) CString GetRadioId(int i);//获取指定索引单选框(radio)元素id CString GetRadioValue(int i);//获取指定索引单选框(radio)元素标题 int GetRadioCount();//返回网页内所有单选框(radio)的数目 CComPtr Object_GetRadioObject(int i);//获取指定索引单选框(radio)对象 int GetRadioIndex(CString NameOrID);//单选框(radio)取索引返回第一个满足条件的索引值,如果失败返回0 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页复选框(checkbox)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ BOOL GetCheckboxChecked(int i);//检查复选框(checkbox)是否被选中(checked),1为选中,0为未选中 BOOL SetCheckboxWhetherSelect(int i,int Select);//设置复选框(checkbox)选中状态,第一个参数填写第几个复选框(checkbox)第二个添写是否选中(1为选中,0为未选中) CString GetCheckboxName(int i);//获取指定索引复选框(Checkbox)元素name(名称) CString GetCheckboxId(int i);//获取指定索引复选框(Checkbox)元素id CString GetCheckboxValue(int i);//获取指定索引复选框(Checkbox)元素标题 int GetCheckboxCount();//返回网页内所有复选框(Checkbox)的数目 CComPtr Object_GetCheckboxObject(int i);//获取指定索引复选框(Checkbox)对象 int GetCheckboxIndex(CString NameOrID);//复选框(Checkbox)取索引返回第一个满足条件的索引值,如果失败返回0 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页组合框(Select)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int GetSelectCount();//返回网页内所有组合框(Select)的数目 int GetSelectOptionCount(int i);//取某个组合框(Select)中的选项(option)的数目 int GetSelectItem(int i);//取组合框(select)现行选中项(0为位置1,1为位置2……) int SetSelectItem(int i,int setect);//选中指定名称的组合框(Select)的指定索引的选项(options) CString GetSelectItemText(int i,int j);//取组合框(Select)中某个选项(options)的文本(value)参数一为第几个组合框第二参数为组合框第几项 CString GetSelectName(int i);//取的某个组合框(Select)的名称(name) CString GetSelectId(int i);//取的某个组合框(Select)的Id int GetSelectIndex(CString NameOrID);//组合框(Select)取索引返回第一个满足条件的索引值,如果失败返回0 CComPtr Object_GetSelectObject(int i);//取的某个组合框(Select)的对象(Object) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页表单(Form)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int GetFormIndex(CString NameOrID);//表单(Form)取索引返回第一个满足条件的索引值,如果失败返回0 int GetFormCount();//返回网页内所有表单(Form)的数目 CString GetFormName(int i);//取的某个表单(Form)的名称(name) CString GetFormId(int i);//取的某个表单(Form)的Id void GetFormSubmit(int i);//提交某个表单(Form) CComPtr Object_GetFormObject(int i);//取的某个表单(Form)的对象(Object) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页文本框(Text)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int GetTextboxIndex(CString NameOrID);//文本框(Text)取索引返回第一个满足条件的索引值,如果失败返回0 void SetTextboxText(int i,CString StrTxt);//按索引填写文本框(Text) CString GetTextboxText(int i);//读取某个文本框(Text)内的内容(value) int GetTextboxCount();//返回网页内所有文本框(Text)的数目 CString GetTextboxType(int i);//取得某个文本框(Text)的类型。类型分为“text”、“password”、“file” CString GetTextboxName(int i);//取的某个文本框(Text)的名称(name) CString GetTextboxId(int i);//取的某个文本框(Text)的Id CComPtr Object_GetTextboxObject(int i);//取的某个文本框(Text)的对象(Object) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页多行文本框(TextArea)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ void SetTextAreaText(int i,CString StrTxt);//按索引填写多行文本框(TextArea)索引从1开始 CString GetTextAreaText(int i);//读取某个多行文本框(TextArea)内的内容(value) int GetTextAreaIndex(CString NameOrID);////多行文本框(TextArea)取索引返回第一个满足条件的索引值,如果失败返回0 int GetTextAreaCount();//返回网页内所有多行文本框(TextArea)的数目 CString GetTextAreaName(int i);//取的某个多行文本框(TextArea)的名称(name) CString GetTextAreaId(int i);//取的某个多行文本框(TextArea)的Id CComPtr Object_GetTextAreaObject(int i);//取的某个多行文本框(TextArea)的对象(Object) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页超链结(url)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int LinkClick(int i);//超链结(url)按索引点击成功返1失败返回0 CString GetLinkHref(int i);//获取指定索引超链结(url)地址 int GetLinkCount();//返回网页内所有超链结(url)的数目 int GetLinkIndex(CString NameOrID);//超链结(url)取索引返回第一个满足条件的索引值,如果失败返回0 CString GetLinkHtml(int i);//获取指定索引超链结(url)元素代码 CString GetLinkText(int i);//获取指定索引超链结(url)元素文本 CComPtr Object_GetLinkObject(int i);//取的某个超链结(url)的对象(Object) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页获取对象(Object)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ CComPtr Object_GetObject_Aggregate(CString tag);//获取基于指定元素名称的对象集合(getElementsByTagName),参数1可添写如:“a”、“table”、“div”、“img”. CComPtr Object_GetObject_NameOrID(CString NameOrId, int i);//按名称或ID取网页元素对象,参数1(元素名称或ID)参数2(0=名称(name),1=ID) CComPtr Object_GetObject_Point(int x, int y);//返回指定 x 和 y 坐标的网页元素对象(elementFromPoint) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为网页对象(Object)操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ void ObjectOperation_ExecutionEvent(CComPtr pDisp,CString Event);//执行某个网页元素相关的脚本方法,事件名称一般是“onclick” void web_RunScript(CString Script,int type);//在当前网页上执行指定的脚本命令,参数1为脚本,参数2(添写1即为:JavaScript 业写2为:VBScript) void web_InsertCode(CString StrCode);//在网页插入网页HTML代码及自定义内容 void Destruction();
第一步:新建一个基于对话框的MFC工程,拖动一棵标准树型控件放于界面之上。添加一个新类CTreeCtrlBT派生自CTreeCtrl。 第二步:为该类添加一些消息响应以及虚函数。其详细作用如下: void PreSubclassWindow(); //用于添加初始化控件的相关信息 WM_SIZE //控件区域发生变化时候的处理 WM_PAINT //绘制控件 WM_MOUSEMOVE //主要获取鼠标所在位置的单元项 第三步:TreeCtrlBT.h中首先声明一个结构用于保存单元项的相关信息,并把所有项的信息放入一个map。实现代码如下: typedef struct tagItemMsg { HTREEITEM hItem; //项的句柄 CBitmap ItemBitmap; //项的位图 COLORREF crTransparent; //透明颜色 tagItemMsg() { hItem = NULL; crTransparent = RGB(255,255,255); } ~tagItemMsg() { if ( ItemBitmap.GetSafeHandle() ) { ItemBitmap.DeleteObject(); } } }ITEM_MSG; typedef map ITEMMSG_MAP; 第四步:计算控件的客户区域大小,以及滚动条滚动的偏移量。详细过程参考源代码 Calculate函数。 第五步:添加接口函数以及成员变量。如下: (注意:TransparentBlt函数,需要包含msimg32.dll) //设置背景位图BOOL SetBackgroudBitmap( UINT nID );BOOL SetBackgroudBitmap(LPCTSTR lpszRecourceName);//设置某一项位图void SetItemBitmap(HTREEITEM hItem, UINT nIdBitmap);void SetItemBitmap(HTREEITEM hItem, LPCTSTR lpszBitmap);//设置展开收缩的图表void SetExpandBitmap(UINT nIdExpand, UINT nIdCollapse, COLORREF crTransparent = RGB(255,255,255));//插入新的项目HTREEITEM InsertItemEx(HTREEITEM hParent, LPCTSTR lpszItem, UINT nIdBitmap = 0, OLORREF crTransparent = RGB(255,255,255));HTREEITEM InsertItemEx(HTREEITEM hParent, LPCTSTR lpszItem, LPCTSTR lpszBitmap, COLORREF crTransparent = RGB(255,255,255));//开启横线void EnableRowLine( BOOL bEnable = TRUE );//是否开启横线BOOL IsEnableRowLine();//开启根节点背景void EnableRootBk( BOOL bEnable = TRUE );//是否开启根节点背景BOOL IsEnableRootBk();//获取某一项信息ITEM_MSG* GetItemMsg(HTREEITEM hItem); 第六步:绘制控件。需要的绘制函数如下: //绘制渐变色矩形区域void GradientFillRect( CDC *pDC, CRect &rect, COLORREF col_from, COLORREF col_to, bool vert_grad ); //绘制控件背景void DrawBackgroudBitmap(CDC* pDc); //绘制单元项void DrawItem( CDC* pDC ); //绘制单元项下部横线void DrawRowLine(CPoint ptBegin, CPoint ptEnd, CDC *pDc = NULL); //绘制展开收缩按钮void DrawExpand(CRect rect, int state,
对日常债务进行数据库操作 .586 .model flat,stdcall option casemap:none include pay.inc include p_Func.asm include p_const.asm include p_struct.asm include p_data.asm include macro.mac .data hInstance HINSTANCE ? CommandLine LPSTR ? hParent dword ? hCursor dword ? hconn_g dword ? henv_g dword ? hstmt_g dword ? dwCount_g dword ? bFlag_g dword ? pPayForData_g PAYFORDATA <> pConfigData CONFIGDATA <> .code include p_code.asm include p_db.asm include p_Dialog.asm include p_ListView.asm include P_ini.asm include p_html.asm ; --------------------------------------------------------------------------- start: invoke GetModuleHandle, NULL mov hInstance,eax invoke DialogBoxParam,hInstance,addr LoginDlgName,0,addr LoginDialog,NULL .if bFlag_g invoke GetCommandLine mov CommandLine,eax invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT .endif invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND LOCAL hMenu:HWND LOCAL hAccelerator:HWND mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInstance pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszMenuName,offset MenuName mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_MAIN_ICON mov wc.hIcon,eax mov wc.hIconSm,eax mov hMainIco,eax invoke LoadMenu,hInstance,IDR_MENU mov hMenu,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke LoadCursor,hInstance,IDI_HANDLE_ICON mov hCursor,eax invoke LoadAccelerators,hInstance,IDA_ACCELERATOR mov hAccelerator,eax invoke RegisterClassEx, addr wc INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,\ hInst,NULL mov hwnd,eax mov hParent,eax invoke ShowWindow, hwnd,SW_SHOWNORMAL invoke UpdateWindow, hwnd .WHILE TRUE invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateAccelerator,hwnd,hAccelerator,addr msg .if eax == 0 invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .endif .ENDW mov eax,msg.wParam ret WinMain endp WndProc proc uses ebx hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM local @stFont:LOGFONT,@hFont:DWORD LOCAL @dwColor:dword .IF uMsg==WM_DESTROY invoke KillTimer,hWnd,IDC_TIMER_STATUSBAR invoke PostQuitMessage,NULL .elseif uMsg==WM_TIMER .if wParam==IDC_TIMER_STATUSBAR invoke _PrintMsg_3 .endif .ELSEIF uMsg==WM_CREATE invoke SetTimer,hWnd,IDC_TIMER_STATUSBAR ,1000,NULL invoke LoadIcon,hInstance,IDI_MAIN_ICON invoke SendMessage, hWnd, WM_SETICON, ICON_BIG,eax ;control invoke _DoToolBar,hInstance,hWnd,IDC_MAIN_TB mov hToolBar,eax ;invoke _DoEdit,hInstance,hToolBar,IDC_MAIN_EDIT ;mov hEdit,eax ;invoke _DoButton,hInstance,hToolBar,IDC_MAIN_BUTTON,_T("搜索") ;mov hButton,eax ;LABEL invoke _DoLabel,hInstance,hToolBar,IDC_BTN_LABEL_3,200,3,150,20 invoke SetDlgItemText,hToolBar,IDC_BTN_LABEL_3,_T("当前用户:") invoke _DoLabel,hInstance,hToolBar,IDC_BTN_LABEL_NAME,270,3,150,20 invoke _DoLabel,hInstance,hToolBar,IDC_BTN_LABEL_1,340,3,150,20 invoke SetDlgItemText,hToolBar,IDC_BTN_LABEL_1,_T("借入:") invoke _DoLabel,hInstance,hToolBar,IDC_BTN_LABEL_IN,380,3,150,20 invoke _DoLabel,hInstance,hToolBar,IDC_BTN_LABEL_2,480,3,150,20 invoke SetDlgItemText,hToolBar,IDC_BTN_LABEL_2,_T("借出:") invoke _DoLabel,hInstance,hToolBar,IDC_BTN_LABEL_OUT,520,3,150,20 invoke _DoStatusBar,hInstance,hWnd,IDC_MAIN_SB mov hStatusBar,eax invoke _DoListView,hInstance,hWnd,IDC_MAIN_LSV mov hListView ,eax invoke _InsertColumnToMainListV,hListView invoke _DoPopupMainMenu, hInstance,hWnd mov hPopupMainMenu,eax invoke _InitConfig,hWnd .elseif uMsg==WM_NOTIFY push edi mov edi, lParam mov eax, [edi.NMHDR].hwndFrom .if eax==hListView .if [edi.NMHDR].code==NM_DBLCLK ;双击 .elseif [edi.NMHDR].code==NM_CLICK ;单击 invoke _GetCurrentFocus,hListView,addr pPayForData_g .elseif [edi.NMHDR].code==NM_RCLICK ;右击 invoke _GetCurrentFocus,hListView,addr pPayForData_g invoke _ShowPopupMainMenu,hWnd,hPopupMainMenu .endif .endif pop edi .elseif uMsg==WM_COMMAND .if lParam !=0 ;工具栏 LOWORD wParam .if eax==IDC_TBB_NEW invoke DialogBoxParam,hInstance,addr NewDlgName,hWnd,addr IddNewDialog,NULL .elseif eax==IDC_TBB_SEE invoke DialogBoxParam,hInstance,addr SeeDlgName,hWnd,addr SeeDialog,NULL .elseif eax==IDC_TBB_PRINT invoke _Print_Html,hWnd .elseif eax==IDC_TBB_HELP invoke DialogBoxParam,hInstance,addr AboutDlgName,hWnd,addr AboutDialog,NULL .elseif eax==IDC_TBB_EXIT invoke SendMessage,hWnd,WM_CLOSE,0,0 .endif .elseif lParam ==0 HIWORD wParam .if eax==0 ;菜单栏 mov eax,wParam .if ax==IDM_NEW invoke DialogBoxParam,hInstance,addr NewDlgName,hWnd,addr IddNewDialog,NULL invoke _RefreshMTData,hWnd,hListView .elseif ax==IDM_SEE invoke DialogBoxParam,hInstance,addr SeeDlgName,hWnd,addr SeeDialog,NULL .elseif ax==IDM_PRINT invoke _Print_Html,hWnd .elseif ax==IDM_CALC invoke _OpenProgramExeFile,hWnd,addr SZCALC,NULL .elseif ax==IDM_HELP invoke DialogBoxParam,hInstance,addr AboutDlgName,hWnd,addr AboutDialog,NULL .elseif ax==IDM_PWD invoke DialogBoxParam,hInstance,addr PwdDlgName,hWnd,addr PwdDialog,NULL .elseif ax==IDM_REFRESH invoke _RefreshMTData,hWnd,hListView .elseif ax==IDM_DEMO invoke DialogBoxParam,hInstance,addr DemoDlgName,hWnd,addr DemoDialog,NULL .elseif ax==IDM_CAL invoke _PromptMsg,_T("建设中...") .endif .elseif eax==1 ;快捷键 .endif .endif .elseif uMsg ==WM_SIZE .if wParam!=SIZE_MINIMIZED invoke SendMessage,hStatusBar,uMsg,wParam,lParam invoke SendMessage,hToolBar,uMsg,wParam,lParam mov eax,lParam mov edx,eax and eax,0ffffh shr edx,16 sub edx,46 invoke MoveWindow,hListView, 0, 28, eax,edx,TRUE mov eax,lParam and eax,0ffffh mov ebx,eax sub eax,210 sub ebx,55 invoke MoveWindow,hEdit, eax, 3,150,20,TRUE invoke MoveWindow,hButton,ebx, 3,50,20,TRUE .endif .elseif uMsg==WM_SIZING LimitWindowWidth 455 LimitWindowHeight 455 .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp _RefreshMTData proc hWnd:dword,hOwner:dword pushad ;连接数据库 invoke DBConnect,hWnd .if eax invoke _PrintMsg_1,_T("数据库连接成功!") .endif ;显示数据 invoke SQLExecDirect,hstmt_g,addr SHOW_ALL_RECODE_MT,sizeof SHOW_ALL_RECODE_MT .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO ;73570000h invoke _ReadMTToMainListV,hOwner,hstmt_g mov dwCount_g,eax invoke _PrintMsg_2,dwCount_g,_T(" ") invoke _PrintMsg_1,_T("加载成功!") .endif invoke DisDBConnect,hWnd .if eax invoke _PrintMsg_1,_T("断开与数据库的连接!") .endif popad ret _RefreshMTData endp _RefreshOPData proc hWnd:dword,hOwner:dword LOCAL @nCount:dword pushad ;连接数据库 invoke DBConnect,hWnd .if eax invoke _PrintMsg_1,_T("数据库连接成功!") .endif ;显示数据 invoke SQLExecDirect,hstmt_g,addr SHOW_ALL_RECODE_OP,sizeof SHOW_ALL_RECODE_OP .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO ;73570000h invoke _ReadOPToSeeListV,hOwner,hstmt_g mov @nCount,eax invoke _SetGroupText,hWnd,@nCount invoke _PrintMsg_1,_T("加载成功!") .endif invoke DisDBConnect,hWnd .if eax invoke _PrintMsg_1,_T("断开与数据库的连接!") .endif popad ret _RefreshOPData endp _InitConfig proc hWnd:dword LOCAL @Buff[MAX_PATH]:byte pushad invoke _RefreshMTData,hWnd,hListView invoke SetDlgItemText,hToolBar,IDC_BTN_LABEL_NAME,addr pConfigData.szName invoke _CalcMTPayForRecord,hWnd,addr pConfigData.szName,FALSE mov dwMoneyIn,eax invoke wsprintf,addr @Buff,addr szMoney,dwMoneyIn invoke SetDlgItemText,hToolBar,IDC_BTN_LABEL_IN,addr @Buff invoke _CalcMTPayForRecord,hWnd,addr pConfigData.szName,TRUE mov dwMoneyOut,eax invoke wsprintf,addr @Buff,addr szMoney,dwMoneyOut invoke SetDlgItemText,hToolBar,IDC_BTN_LABEL_OUT,addr @Buff ;TITLE invoke RtlZeroMemory,addr @Buff,sizeof @Buff invoke lstrcpy,addr @Buff,addr pConfigData.szAppName invoke lstrcat,addr @Buff,_T(" -- ") invoke lstrcat,addr @Buff,addr pConfigData.szName invoke SendMessage,hWnd,WM_SETTEXT,0,addr @Buff popad ret _InitConfig endp end start

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧