样式为LVCFMT_FIXED_WIDTH的CListCtrl不适用于默认Windows.Common-Controls

时间:2019-04-08 15:07:17

标签: unicode mfc common-controls

我使用LVCFMT_FIXED_WIDTH样式来防止用户列的大小。

m_ListCtrl.InsertColumn(0, _gszColumnLabel[0], _gnColumnFmt[0], LVCFMT_FIXED_WIDTH, _gnColumnWidth[0], -1);

我仅是通过hasard发现的,这在Unicode中有效,但在NON Unicode应用程序中无效。用户仍然可以调整列的大小。

我认为这与stdafx.h中的默认Windows.Common-Controls清单框架有关

#ifdef _UNICODE
#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
#endif

很遗憾,NON Unicode应用程序没有默认设置。

如果我也对非Unicode应用程序使用相同的清单,它将再次起作用。

但是我不确定,这是否是正确的解决方案?我们可以对Unicode和非Unicode应用程序使用相同的Windows.Common-Controls清单吗?

1 个答案:

答案 0 :(得分:1)

import cv2 import numpy as np cap = cv2.VideoCapture('test.mp4') #cap = cv2.VideoCapture(0) # I tried using webcam and works count = 0 while cap.isOpened(): ret,frame = cap.read() cv2.imshow('window-name',frame) # Below you have to insert the full path of XML file, below is mine face_cascade = cv2.CascadeClassifier('C:/ProgramData/Anaconda2/pkgs/opencv-3.2.0-np111py27_0/Library/etc/haarcascades/haarcascade_frontalface_default.xml') gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.imwrite("frame%d.jpg" % count, frame) count = count + 1 if cv2.waitKey(10) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() # destroy all the opened windows 需要CommCtrl v6,最容易通过清单启用。但是您发现CommCtrl v6不仅限于Unicode窗口(我在使用ANSI窗口的多个旧版应用程序中使用CommCtrl v6,并且运行良好),因此为什么Microsoft将LVCFMT_FIXED_WIDTH限制为仅Unicode构建,我不知道。

但是,使用CommCtrl v6并不是锁定列大小的唯一方法。另一种选择是将ListView本身(而不是其父窗口!)子类化以处理HDN_BEGINTRACK通知,返回TRUE以阻止调整大小。