标签: comctl32

如何在没有清单的情况下启用视觉样式

根据文件:

"如果您希望应用程序使用ComCtl32.dll版本6,则必须添加应用程序清单或编译器指令,以指定如果版本6可用,则应使用该版本."

注意上面的逻辑OR?那么这个神秘的编译器指令是什么?

我有一个原生的Win32 C++应用程序,它完全包含在一个.cpp文件中.没有资源文件,清单文件等.我想保持这种方式,但我也想使用视觉样式.

c++ winapi comctl32 visual-styles

11
推荐指数
3
解决办法
1万
查看次数

C#:调试器中的comctl32.dll版本6

我正在使用WindowsAPICodePack for TaskDialog.当我尝试显示对话框时,它说它需要加载comctl32.dll的版本6.所以我在app.manifest中添加了第6版并尝试运行它.仍然没有运气.我去了Debug文件夹并运行没有Visual Studio的程序,它工作正常.我猜测Visual Studio没有使用清单文件......我想知道是否有办法让它做到这一点.

c# winapi comctl32 taskdialog visual-studio-2008

7
推荐指数
1
解决办法
2432
查看次数

需要列表控制 LVM_SETTOPINDEX

列表视图控件具有LVM_GETTOPINDEX允许获取最顶层可见项的索引的消息。

现在我需要设置最上面的可见项目,但令人惊讶的是没有任何 LVM_SETTOPINDEX消息是自然的。

有没有一种简单干净的方法来设置最上面的项目?

我的列表控件始终处于报告模式。

winapi mfc comctl32

6
推荐指数
1
解决办法
770
查看次数

当清单作为资源添加时,Delphi 5会导致EAccessViolation

这是我最近发现的最有趣的问题之一.我们有一个传统的Delphi 5程序(Rave Reports 4引用阻止升级到D2007).

使用模板生成的版本资源编译程序时,它可以正常工作.当模板生成的清单资源也添加到程序的dpr时,就会出现问题.

Manifest是一个"通用"ASCII文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

  <assemblyIdentity
    name="Name"
    processorArchitecture="x86"
    version="2.0.0.0"
    type="win32"/>

  <description>Desc</description>

  <dependency>
      <dependentAssembly>
          <assemblyIdentity
              type="win32"
              name="Microsoft.Windows.Common-Controls"
              version="6.0.0.0"
              processorArchitecture="x86"
              publicKeyToken="6595b64144ccf1df"
              language="*"
          />
      </dependentAssembly>
  </dependency>

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    </application> 
  </compatibility>

</assembly>
Run Code Online (Sandbox Code Playgroud)

在App.dpr中有一个清单资源引用:

{$R 'manifest.res' 'manifest.rc'}
Run Code Online (Sandbox Code Playgroud)

通过调用编译清单:

C:\Program Files\Borland\Delphi5\Bin\brcc32.exe manifest.rc
Run Code Online (Sandbox Code Playgroud)

当程序启动时,会引发异常:

exception class   : EAccessViolation
exception message : Access violation at address 75A1A890 in module 'KERNELBASE.dll'. Read of address 00000001.
Run Code Online (Sandbox Code Playgroud)

主线程的调用堆栈: …

delphi compatibility exception comctl32 manifest

5
推荐指数
1
解决办法
2340
查看次数

GCC Win32 API链接问题与ComCtl32

我无法使用GCC(MinGW)将Comctl32.lib链接到我的程序.

GCC输入:

gcc -o program.exe main.c images.o -lgdi32 -lcomctl32 -mwindows
Run Code Online (Sandbox Code Playgroud)

GCC输出

main.c: In function 'WinMain':
main.c:120:2: error: unknown type name 'INITCOMMONCONTROLSEX'
main.c:124:9: error: request for member 'dwICC' in something not a structure or union
Run Code Online (Sandbox Code Playgroud)

main.c中的相关代码

#define _WIN32_WINNT _WIN32_WINNT_WIN7
#include <windows.h>
#include <commctrl.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmd)
{
   Line 120: INITCOMMONCONTROLSEX icex;
   Line 124: icex.dwICC = ICC_LISTVIEW_CLASSES;
   InitCommonControlsEx(&icex);
}
Run Code Online (Sandbox Code Playgroud)

感谢您提供的任何帮助或信息.我已经这么久了,只是无法得出答案.

c winapi gcc comctl32

5
推荐指数
1
解决办法
1745
查看次数

MFC程序挂起:在Vista上更新KB3059317后损坏的Comctl32.dll?

我有一个基于MFC的程序,在应用更新3059317之前工作正常:

MS15-060:Microsoft公共控件中的漏洞可能允许远程执行代码:2015年6月9日)

此更新将替换Comctl32.dll为新版本.

应用此更新后,打开对话框只会挂起程序.并非所有对话框都会受到影响,但打印预览始终处于挂起状态,但不会导致程序崩溃.它变得没有反应.

我不知道如何尝试调试此问题以找到解决方法.程序挂起时创建内存转储会产生以下堆栈跟踪:

comctl32.dll!751f8505() 
Xxx.exe!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2095 + 0x13 bytes
Xxx.exe!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 285
Xxxx.exe!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 434 + 0x10 bytes
user32.dll!76aafd72() 
user32.dll!76aa84de() 
user32.dll!76aafd72() 
user32.dll!76aa9f8d() 
ntdll.dll!77dd5a7e() 
user32.dll!76aaa2af() 
comctl32.dll!75249cfb() 
comctl32.dll!751fb559() 
user32.dll!76aafd72() 
user32.dll!76aafe4a() 
user32.dll!76ab09d3() 
user32.dll!76abb759() 
Xxx.exe!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1116 + 0x7 bytes …
Run Code Online (Sandbox Code Playgroud)

c++ windows mfc comctl32

5
推荐指数
1
解决办法
865
查看次数

为什么TVM_GETITEM消息在comctl32.ocx或mscomctl.ocx树视图上失败?

我写了一个函数,它可以生成树视图项的文本,即使树视图在远程进程中也是如此.该函数在远程进程中分配两个内存块,填充TVITEM结构(复制到远程进程中),发送TVM_GETITEM消息,最后将第二个远程内存块的内容读回本地缓冲区.这是代码:

std::string getTreeViewItemText( HWND treeView, HTREEITEM item )
{
    DWORD pid;
    ::GetWindowThreadProcessId( treeView, &pid );

    HANDLE proc = ::OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, pid );
    if ( !proc )
        // handle error

    TVITEM tvi;
    ZeroMemory( &tvi, sizeof(tvi) );

    LPVOID tvi_ = ::VirtualAllocEx( proc, NULL, sizeof(tvi), MEM_COMMIT, PAGE_READWRITE);
    if ( !tvi_ )
        // handle error

    TCHAR buffer[100] = { 'X' };

    LPVOID txt_ = ::VirtualAllocEx( proc, NULL, sizeof(buffer), MEM_COMMIT, PAGE_READWRITE );
    if ( !txt_ )
        // handle error

    tvi.mask …
Run Code Online (Sandbox Code Playgroud)

windows treeview winapi comctl32

2
推荐指数
1
解决办法
2087
查看次数

COMCTL32.DLL加载两次时的GetModuleHandle和GetProcAddress

我在一个COMCTL32.DLL加载两次的进程内运行,一次使用版本5.82.7601.17514,一次使用版本6.10.7601.17514.旧版本由程序链接的一些遗留DLL加载,另一个版本由较新的DLL加载.

如果我使用GetModuleHandle (L"COMCTL32.DLL")我无法控制解决的DLL.

GetProcAddress例如,当我调用到达时,TaskDialogIndirect我得到一个空指针,这当然是因为我找回了遗留DLL的句柄.

那么,是否有一些方法可以获取地址,比如TaskDialogIndirect何时加载两个DLL.

如果没有,我可以以某种方式确保该进程加载6.10版本而不是5.82,希望我们的旧版DLL能够在较新版本的情况下正常运行COMCTL32吗?

dll winapi comctl32 loadlibrary

1
推荐指数
1
解决办法
1527
查看次数