这是怎么回事?

xixia07m 2018-06-30 02:10:07
两个不同项目的头文件,源文件一模一样,但是有一个能调整行高,但另一个修改行高就不起作用,就是这个语句mlist.SetRowHeight(50);把50改为别的,行高就是不变,但是另一个程序就能改变行高。请问这是怎么回事?
...全文
147 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2018-07-01
  • 打赏
  • 举报
回复
重绘 CListCtrl 必须 有 “Owner draw fixed“,否则 无效
xixia07m 2018-07-01
  • 打赏
  • 举报
回复
stdafx.h头文件中就是你给出的这部分代码是浅色显示,其余的都是正常显示。
oblivi 2018-06-30
  • 打赏
  • 举报
回复
引用 7 楼 xixia07m 的回复:
#6 我看了有这段代码,但是是浅色显示,不知道是怎么回事?
都是浅色?
xixia07m 2018-06-30
  • 打赏
  • 举报
回复
#6 我看了有这段代码,但是是浅色显示,不知道是怎么回事?
oblivi 2018-06-30
  • 打赏
  • 举报
回复
看看你stdafx.h头文件下有没有
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
这段代码
schlafenhamster 2018-06-30
  • 打赏
  • 举报
回复
头文件里看看 “mlist 这是 一个 什么控件”
赵4老师 2018-06-30
  • 打赏
  • 举报
回复
在控件的属性页对话框中设置控件各项属性。
xixia07m 2018-06-30
  • 打赏
  • 举报
回复


上图是能调整列表控件行高的IDD_REMARKSECRET_DIALOG资源视图显示。



上图是无法调整列表控件行高的的资源视图显示。

这两个程序的头文件夹中.h文件和源文件中.cpp文件夹的内容都完全一致,请问为什么一个能能改行高,一个改不了行高。

下面的程序是找文件,并显示出找到的特定后缀名的文件列表的程序,其中改行高的语句是mlist.SetRowHeight(50);这句,但是现在改了,行高不变,怎么回事,请高手指点。


// remarksecretDlg.cpp : 实现文件
#include "stdafx.h"
#include "remarksecret.h"
#include "remarksecretDlg.h"
#include "Resource.h"
#include "windows.h"
#include <algorithm>
#include <regex>



#define pageSize 50


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

typedef struct FileInfo
{
string szFileName; //去掉std::才为正确
string szFilePath;
string szCreateTime;
}FileInfo;

vector<FileInfo>fileList;


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

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

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

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

// 实现
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

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

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CremarksecretDlg 对话框




CremarksecretDlg::CremarksecretDlg(CWnd* pParent /*=NULL*/) //这是构造函数
: CDialogEx(CremarksecretDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pageNo=1; //在这里声明是整个翻页程序的关键所在。
}

void CremarksecretDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, mlist);
//DDX_Control(pDX, IDC_SYSLINK1, m_Link);
}

BEGIN_MESSAGE_MAP(CremarksecretDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CremarksecretDlg::OnLvnItemchangedList1)
ON_BN_CLICKED(IDC_BUTTON1, &CremarksecretDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_CHECK1, &CremarksecretDlg::OnBnClickedCheck1)
ON_BN_CLICKED(IDC_CHECK2, &CremarksecretDlg::OnBnClickedCheck2)
ON_BN_CLICKED(IDC_CHECK3, &CremarksecretDlg::OnBnClickedCheck3)
ON_BN_CLICKED(IDC_CHECK4, &CremarksecretDlg::OnBnClickedCheck4)
ON_BN_CLICKED(IDC_CHECK5, &CremarksecretDlg::OnBnClickedCheck5)
ON_BN_CLICKED(IDC_BUTTON3, &CremarksecretDlg::OnBnClickedButtonNext)
ON_BN_CLICKED(IDC_BUTTON2, &CremarksecretDlg::OnBnClickedButtonPrevous)
END_MESSAGE_MAP()


void CremarksecretDlg::OnBnClickedCheck1() //这是不返回内容的函数
{
// TODO: 在此添加控件通知处理程序代码
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck());
if(nstatus=1)
{
//if(match1("doc*","docx")==1&&match1("doc*","doc")==1)
suffixStr1=reg1;//||suffixStr=_T("docx");
}
else
{
suffixStr1=_T("-");
}
}


void CremarksecretDlg::OnBnClickedCheck2()
{
// TODO: 在此添加控件通知处理程序代码
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK2))->GetCheck());
if(nstatus=1)
{
suffixStr2= //如果符号是==,这是判断而不是赋值了,所以是错误的。
}
else
{
suffixStr2=_T("-");
}
}


void CremarksecretDlg::OnBnClickedCheck3()
{
// TODO: 在此添加控件通知处理程序代码
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK3))->GetCheck());
if(nstatus=1)
{
suffixStr3=reg2;//||suffixStr=_T("pptx");
}
else
{

}
}


void CremarksecretDlg::OnBnClickedCheck4()
{
// TODO: 在此添加控件通知处理程序代码
int nstatus=(((CButton*)GetDlgItem(IDC_CHECK4))->GetCheck());
if(nstatus=1)
{
suffixStr4=reg3;//||suffixStr=_T("xlsx"); ;
}
else
{
suffixStr4=_T("-");
}
}


void CremarksecretDlg::OnBnClickedCheck5()
{
// TODO: 在此添加控件通知处理程序代码
int nStatus=(((CButton*)GetDlgItem(IDC_CHECK5))->GetCheck());
if(nStatus=1)
{
suffixStr5=_T("txt"); //假如把find中的程序调到这里来,则调用过来的程序段中的参数会出错!,因为你破坏了find程序的前后逻辑关系。
}
else
{
suffixStr5=_T("-");
}

}



//递归遍历所有文件
void find (LPCTSTR lpPath,std::vector<FileInfo>&FileList)
{
//std::vector<FileInfo>fileList;
std::string szFind(lpPath);
WIN32_FIND_DATA FindFileData;
szFind+=_T("\\*.*");
HANDLE hFind=::FindFirstFile(szFind.c_str(),&FindFileData); //这里用到了szFind
if(INVALID_HANDLE_VALUE==hFind) return;
do//while(1)
{
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) //判断
{//dir 目录在列表中可以双击打开,不要递归!
if(FindFileData.cFileName[0]!='.')
{
std::string szPath(lpPath);
szPath+=_T("\\");
szPath+=FindFileData.cFileName;
TRACE1("%s\n",szPath.c_str());
find(szPath.c_str(),FileList); //自注:这里小写的fileList不行。这一句是递归。
}
}
else
{ std::string strFileName=FindFileData.cFileName;//文件名
suffixStr=strFileName.substr(strFileName.find_last_of('.')+1); //这里的后缀就是所有文件类型的后缀,下面的文件是所有类型的文件的显示。
if(std::regex_match(suffixStr,suffixStr1))
{ FILETIME ft=FindFileData.ftCreationTime; //取得创建时间
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft); //转换成本地时间
FileTimeToSystemTime(&ft,&st); //在这句之前加上上一句,就不用再小时那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName; //文件全路径名
FileInfo fi; //自注:结构变量不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str()); //自注:这句是后加上的
FileList.push_back(fi); //自注:push_back(fi)是什么意思?
}
else if(suffixStr==suffixStr2)
{
FILETIME ft=FindFileData.ftCreationTime; //取得创建时间
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft); //转换成本地时间
FileTimeToSystemTime(&ft,&st); //在这句之前加上上一句,就不用再小时那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName; //文件全路径名
FileInfo fi; //自注:结构变量不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str()); //自注:这句是后加上的
FileList.push_back(fi); //自注:push_back(fi)是什么意思?
}
else if(std::regex_match(suffixStr,suffixStr3))
{
FILETIME ft=FindFileData.ftCreationTime; //取得创建时间
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft); //转换成本地时间
FileTimeToSystemTime(&ft,&st); //在这句之前加上上一句,就不用再小时那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName; //文件全路径名
FileInfo fi; //自注:结构变量不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str()); //自注:这句是后加上的
FileList.push_back(fi); //自注:push_back(fi)是什么意思?
}
else if(std::regex_match(suffixStr,suffixStr4))
{
FILETIME ft=FindFileData.ftCreationTime; //取得创建时间
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft); //转换成本地时间
FileTimeToSystemTime(&ft,&st); //在这句之前加上上一句,就不用再小时那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName; //文件全路径名
FileInfo fi; //自注:结构变量不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str()); //自注:这句是后加上的
FileList.push_back(fi); //自注:push_back(fi)是什么意思?
}
else if(suffixStr==suffixStr5)
{
FILETIME ft=FindFileData.ftCreationTime; //取得创建时间
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft); //转换成本地时间
FileTimeToSystemTime(&ft,&st); //在这句之前加上上一句,就不用再小时那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName; //文件全路径名
FileInfo fi; //自注:结构变量不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str()); //自注:这句是后加上的
FileList.push_back(fi); //自注:push_back(fi)是什么意思?
}
}
}while(::FindNextFile(hFind,&FindFileData));
}
//FindClose(hFind);

#define BIF_NEWDIALOGSTYLE 0x0040

// CremarksecretDlg 消息处理程序

BOOL CremarksecretDlg::OnInitDialog() //自注:这个函数是自动生成的
{
CDialogEx::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

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

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

// TODO: 在此添加额外的初始化代码
mlist.SetRowHeight(50);
mlist.SetExtendedStyle(mlist.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
mlist.InsertColumn(0,_T("操作"),LVCFMT_LEFT,80);//100指定每列宽度
mlist.InsertColumn(1,_T


schlafenhamster 2018-06-30
  • 打赏
  • 举报
回复
mlist 这是 一个 grid 控件 ?
zgl7903 2018-06-30
  • 打赏
  • 举报
回复
是不是两个项目属性不一样?
比如UNICODE与多字节 静态库/动态库 等

16,472

社区成员

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

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

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