求救!关于CreateWindowEx创建ListViewControl出现1407错误!

scotwo 2010-05-29 11:59:44
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
HINSTANCE g_hInst;
HWND hWinMain,hList;
#define ID_LISTVIEW 104

#pragma comment(lib,"comctl32")

void InitListView()
{

LV_COLUMN lvc;

hList=CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEWA, NULL,
WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS,
0, 0, 0, 0, hWinMain, (HMENU)ID_LISTVIEW, g_hInst, NULL);
if(!hList)
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"Error",MB_OK);

}
SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES);

lvc.mask= LVCF_TEXT | LVCF_WIDTH ;
lvc.fmt=LVCFMT_RIGHT;
lvc.pszText="序号";
lvc.cx=50;
SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&lvc);

lvc.mask |= LVCF_FMT;
lvc.fmt=LVCFMT_LEFT;

lvc.pszText="CCCC";
lvc.cx= 350;
SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&lvc);

lvc.pszText="AAAA";
lvc.cx= 100;
SendMessage(hList, LVM_INSERTCOLUMN, 2, (LPARAM)&lvc);

}

LRESULT CALLBACK ProcWinMain(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
//HANDLE_MSG(hwnd,WM_COMMAND,Cls_OnCommand);
case WM_SIZE:
MoveWindow(hList,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
return 0;
case WM_SHOWWINDOW:

return 0;
case WM_CREATE:
hWinMain=hwnd;
InitListView();
//LocateNtdllEntry();
//FindExport();
//DebugPrivilege (SE_DEBUG_NAME,TRUE);
//GetSSDT();
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_NOTIFY:
switch (LOWORD(wParam))
{
case ID_LISTVIEW:
if( ((LPNMHDR)lParam)->code == NM_CUSTOMDRAW )
{
switch( ((LPNMLVCUSTOMDRAW)lParam)->nmcd.dwDrawStage )
{
case CDDS_PREPAINT:
return CDRF_NOTIFYITEMDRAW;
case CDDS_ITEMPREPAINT:
{
LPNMLVCUSTOMDRAW customDraw = (LPNMLVCUSTOMDRAW)lParam;
customDraw->clrTextBk=customDraw->nmcd.dwItemSpec%2?RGB(250, 250, 250):RGB(0xFF, 0xFF, 0xFF);
//if () customDraw->clrText = RGB(255, 0, 0) ;
//else customDraw->clrText = RGB(0, 0, 0) ;
return CDRF_NEWFONT;
}
break;
default:
return CDRF_DODEFAULT;
}
}
break;
}
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
int ShowDialog(HINSTANCE hInstance)
{
WNDCLASSEX stWndClass;
MSG stMsg;
INITCOMMONCONTROLSEX iex;

g_hInst=hInstance;
iex.dwSize=sizeof(iex);
iex.dwICC=ICC_LISTVIEW_CLASSES;
if(!InitCommonControlsEx(&iex))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"2",MB_OK);

}
// ssdt_list=new SSDT_LIST_ENTRY[500];

ZeroMemory(&stWndClass,sizeof(stWndClass));
// HMENU hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));
HICON g_hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));;
stWndClass.hCursor=LoadCursor(0,IDC_ARROW);
stWndClass.cbSize=sizeof(WNDCLASSEX);
stWndClass.style=CS_HREDRAW | CS_VREDRAW;
stWndClass.lpfnWndProc=ProcWinMain;
stWndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW + 1);
stWndClass.lpszClassName="DymaticCreateWindow";
stWndClass.hIcon=g_hIcon;
stWndClass.hInstance=g_hInst;

if(!RegisterClassEx(&stWndClass))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"Error",MB_OK);

}
//建立并显示窗口
CreateWindowEx(WS_EX_CLIENTEDGE,"DymaticCreateWindow","动态创建窗口",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL/*hMenu*/,hInstance,NULL);

ShowWindow(hWinMain,SW_SHOWNORMAL);
UpdateWindow(hWinMain);

//消息循环
while (PeekMessage(&stMsg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&stMsg);
DispatchMessage(&stMsg);
}
while (1)
{
ShowWindow(hWinMain,SW_SHOWNORMAL);
}
WaitMessage();
return (int)stMsg.wParam;
}

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ShowDialog,(LPVOID)hModule,NULL,NULL);
ShowDialog(hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

上面是源代码,程序远程注入,在CreateProcess 的时候把进程暂停,然后远程注入执行,唯独ListView不出来,感觉像是comctl32加载问题, GetLastError =1407 无有效的模组

怎么解决,,,如果不用CreateThread去创建窗口没有任何问题
...全文
422 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-06-07
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
wltg2001 2010-05-30
  • 打赏
  • 举报
回复
而且你CreateWindowEx似乎在创建一个stWndClass.lpszClassName="DymaticCreateWindow";
窗口,这怎么和listview联系起来的?老实说,真没看出来
==========
你可能看错了,他这个创建是主窗口。他是用
hList=CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEWA, NULL,
WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS,
0, 0, 0, 0, hWinMain, (HMENU)ID_LISTVIEW, g_hInst, NULL);来创建ListViewControl的。将第二个参数改成 WC_LISTVIEW试试
scotwo 2010-05-30
  • 打赏
  • 举报
回复
HINSTANCE g_hInst;
HWND hWinMain,hList;

arong1234 2010-05-30
  • 打赏
  • 举报
回复
不知道你“无效的模组”是怎么得来得,1407的含义是ERROR_CANNOT_FIND_WND_CLASS,也就是它找不到你指定的WIndow class name

而且你CreateWindowEx似乎在创建一个stWndClass.lpszClassName="DymaticCreateWindow";
窗口,这怎么和listview联系起来的?老实说,真没看出来
wltg2001 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 feilongjilei 的回复:]
1407错误是因为这个类还没有注册呢!
[/Quote]
很有可能是CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEWA, ...中的WC_LISTVIEWA这个宏定义的问题,后面写明了A,用的是ANSI,如果是UNICODE工程一定不行。改成WC_LISTVIEW试试
feilongjilei 2010-05-30
  • 打赏
  • 举报
回复
1407错误是因为这个类还没有注册呢!
feilongjilei 2010-05-30
  • 打赏
  • 举报
回复
5楼正解!
To create a list-view control, use the CreateWindow or CreateWindowEx function and specify the WC_LISTVIEW window class. This window class is registered when the common controls DLL loads. To ensure that this DLL loads, use the InitCommonControls or InitCommonControlsEx function.
scotwo 2010-05-30
  • 打赏
  • 举报
回复
可能!这个问题感觉是我没有注意到的!
[Quote=引用 8 楼 arong1234 的回复:]
确实!楼主把许多无关代码都贴出来了:(

会不会是因为楼主的线程使用的是unicode,因此classname是WC_LISTVIEWW?

引用 3 楼 wltg2001 的回复:
而且你CreateWindowEx似乎在创建一个stWndClass.lpszClassName="DymaticCreateWindow";
窗口,这怎么和listview联系起来的?老实说,真没看出来……
[/Quote]
arong1234 2010-05-30
  • 打赏
  • 举报
回复
确实!楼主把许多无关代码都贴出来了:(

会不会是因为楼主的线程使用的是unicode,因此classname是WC_LISTVIEWW?
[Quote=引用 3 楼 wltg2001 的回复:]
而且你CreateWindowEx似乎在创建一个stWndClass.lpszClassName="DymaticCreateWindow";
窗口,这怎么和listview联系起来的?老实说,真没看出来
==========
你可能看错了,他这个创建是主窗口。他是用
hList=CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEWA, NULL,
W……
[/Quote]
scotwo 2010-05-30
  • 打赏
  • 举报
回复
怎样才行!
疯癫小程序 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wltg2001 的回复:]
你看看将INITCOMMONCONTROLSEX iex;

g_hInst=hInstance;
iex.dwSize=sizeof(iex);
iex.dwICC=ICC_LISTVIEW_CLASSES;
if(!InitCommonControlsEx(&iex))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",G……
[/Quote]
这种方法似乎不行。。。
wltg2001 2010-05-30
  • 打赏
  • 举报
回复
你看看将INITCOMMONCONTROLSEX iex;

g_hInst=hInstance;
iex.dwSize=sizeof(iex);
iex.dwICC=ICC_LISTVIEW_CLASSES;
if(!InitCommonControlsEx(&iex))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"2",MB_OK);

}
这段初始化代码写在CreateWindowEx前面试试
scotwo 2010-05-30
  • 打赏
  • 举报
回复
如果不在Thread中去创建没有问题的,关键问题是在线程中,并且这个是一个DLL,执行有限了宿主进程
标题SpringBoot与安卓融合的企业网络主机IP管理系统研究AI更换标题第1章引言介绍企业网络主机IP地址管理的研究背景、意义、现状,论文的方法及创新点。1.1研究背景与意义阐述企业网络中IP地址管理的重要性和当前存在的问题。1.2国内外研究现状分析国内外在IP地址管理系统方面的研究进展和技术应用。1.3研究方法以及创新点介绍采用SpringBoot与安卓融合技术的研究方法及其创新之处。第2章相关理论总结和评述与IP地址管理系统相关的现有理论和技术。2.1网络通信基础介绍TCPIP协议、IP地址分类及子网划分等基础知识。2.2SpringBoot框架理论阐述SpringBoot框架的核心概念、特点及其在Web开发中的应用。2.3安卓开发理论介绍安卓系统的架构、开发环境及主要组件。第3章系统设计详细描述基于SpringBoot与安卓的企业网络主机IP管理系统的设计方案。3.1系统架构设计介绍系统的总体架构、模块划分及模块间的交互方式。3.2数据库设计设计数据库结构,包括IP地址信息表、设备信息表等。3.3安卓客户端设计阐述安卓客户端的功能设计、界面布局及交互逻辑。第4章系统实现详细描述系统的实现过程,包括开发环境搭建、代码实现及调试等。4.1SpringBoot服务端实现介绍服务端的功能实现,包括IP地址分配、回收、查询等。4.2安卓客户端实现阐述客户端的具体实现,包括界面开发、网络通信及数据处理。4.3系统集成与测试介绍系统的集成过程及测试方法,包括单元测试、集成测试等。第5章研究结果呈现系统实现后的实验分析结果,包括性能评估和功能验证。5.1系统性能评估通过实验数据评估系统的响应时间、吞吐量等性能指标。5.2系统功能验证通过实际使用场景验证系统的各项功能是否满足需求。5.3对比方法分析对比传统IP地址管理方式,分析新系统的优势和不足。第6章结论与展望总结系统研究成果,
# 细菌觅食优化算法BFO Python代码 细菌群体智能算法 ## 项目简介 本项目实现了细菌觅食优化算法(Bacterial Foraging Optimization Algorithm, BFO),这是一种模拟细菌在营养梯度中觅食行为的仿生优化算法。算法通过细菌的趋化、繁殖和消除-分散三种行为来搜索最优解。 ## 环境要求 - Python 3.7+ - numpy - matplotlib ## 安装说明 1. 安装依赖包: ```bash pip install numpy matplotlib ``` 2. 运行程序: ```bash python main.py ``` ## 使用说明 直接运行主程序即可: ```bash python main.py ``` 程序将自动进行优化计算,并在控制台输出迭代过程,最终生成可视化结果图片。 ## 项目结构 - `main.py`: 主程序文件,包含完整的BFO算法实现 ## 技术原理 ### 算法原理 细菌觅食优化算法模拟细菌的三种主要行为: 1. **趋化行为**:细菌通过翻滚和游动在营养梯度中寻找食物 2. **繁殖行为**:健康度好的细菌分裂产生后代 3. **消除-分散行为**:部分细菌被随机重新分布到搜索空间 ### 核心参数 - **种群大小**:细菌的数量 - **趋化步数**:每代中每个细菌的趋化操作次数 - **游动长度**:细菌沿一个方向连续游动的最大步数 - **移动步长**:细菌每次移动的距离 - **繁殖比例**:参与繁殖的细菌比例 - **分散概率**:细菌被重新分布的概率 ## 示例演示 运行程序后,将生成包含两个子图的图片: -

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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