我使用Visual Studio 2013创建了一个简单的拆分窗口应用程序.有两个视图,一个视图由default-view-class组成,另一个视图由from-view-class派生而来CScrollView.
/////////////////////////
// MainFrm.cpp
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext)
{
split_wnd.CreateStatic(this,1,2);
CRect cr;
GetClientRect(&cr);
split_wnd.CreateView(0,0,RUNTIME_CLASS(CProjectMainView),CSize(cr.Width()/2,cr.Height()),pContext);
split_wnd.CreateView(0,1,RUNTIME_CLASS(CMyCustomView),CSize(cr.Width()/2,cr.Height()),pContext);
return true;
}
Run Code Online (Sandbox Code Playgroud)
这个分离器工作正常.
当我尝试将ON_COMMAND处理程序添加到其中一个菜单项时,会出现问题.如果我将ON_COMMAND处理程序放在default-view-class中则没有问题.菜单项点击很好,处理程序工作.
但是,如果我将ON_COMMAND处理程序放在custom-view-class中,则菜单项根本不会启用.
我相信我已经做了一切,在我的自定义视图类中正确实现了消息映射.
/////////////////////////
// CMyCustomView.h
class CMyCustomView:public CScrollView
{
public:
DECLARE_DYNCREATE(CMyCustomView)
CMyCustomView();
~CMyCustomView();
virtual void OnDraw(CDC* /*pDC*/);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void OnInitialUpdate();
public:
DECLARE_MESSAGE_MAP()
afx_msg void OnMenuIdTestMessageMap();
};
Run Code Online (Sandbox Code Playgroud)
该DECLARE_MESSAGE_MAP()肯定是有在MyCustomView.h当然,我已经添加BEGIN_MESSAGE_MAP,END_MESSAGE_MAP()对在MyCustomView.cpp文件.
/////////////////////////
// CMyCustomView.cpp
BEGIN_MESSAGE_MAP(CMyCustomView,CScrollView)
ON_COMMAND(MENU_ID_TEST_MESSAGE_MAP,&CMyCustomView::OnMenuIdTestMessageMap)
END_MESSAGE_MAP()
void CMyCaptureView::OnMenuIdTestMessageMap()
{
// TODO: Add your …Run Code Online (Sandbox Code Playgroud) 我可以用CString在CString::Format如下:
CString text = _T("text");
CString format;
format.Format(_T("%s"), text);
Run Code Online (Sandbox Code Playgroud)
在 MFC 源文件和 MFC 书籍中可以看到相同的方法。例如:
//From MFC file:
//C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\src\mfc\
// afxeditbrowsectrl.cpp
BOOL CMFCEditBrowseCtrl::OnIllegalFileName(CString& strFileName)
{
CString strError;
CString strMessage;
...
strMessage.Format(_T("%Ts\r\n%Ts"), strFileName, strError);
//I don't know what is the `T` in `"%Ts"` !
...
}
Run Code Online (Sandbox Code Playgroud)
然而,其他 MFC 源文件使用LPCTSTR强制转换。例子:
format.Format(_T("%s"), (LPCTSTR)text);
Run Code Online (Sandbox Code Playgroud)
演员表是强制性的吗?
是否可以为重载运算符编写lambda表达式?
例如,我有以下结构:
struct X{
int value;
//(I can't modify this structure)
};
Run Code Online (Sandbox Code Playgroud)
X需要==运营商
int main()
{
X a = { 123 };
X b = { 123 };
//[define equality operator for X inside main function]
//if(a == b) {}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
==运算符可以定义为bool operator==(const X& lhs, const X& rhs){...},但这需要添加单独的函数,并且我的比较仅在特定函数内有效.
auto compare = [](const X& lhs, const X& rhs){...}将解决问题.我想知道我是否可以将这个lambda编写为运算符.
我创建了一个包含以下样式的工具栏:
DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
| CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE
| TBSTYLE_FLAT | TBSTYLE_LIST;
Run Code Online (Sandbox Code Playgroud)
然后我用纯文本按钮填充工具栏:
bool InsertButton(int Index, int CmdId, BYTE Style, BYTE State,
int TxtIdx, DWORD_PTR lParam)
{
TBBUTTON tbb = { 0 };
tbb.idCommand = CmdId;
tbb.fsStyle = Style; // == BTNS_AUTOSIZE | BTNS_DROPDOWN
tbb.fsState = State;
tbb.iBitmap = I_IMAGENONE;
tbb.iString = TxtIdx;
tbb.dwData = lParam;
return (bool)CToolBarCtrl::InsertButton(Index, &tbb);
}
Run Code Online (Sandbox Code Playgroud)
填充工具栏后,我想获得其按钮的实际大小.但GetButtonInfo返回零大小.
int GetBtnSize(int Idx) const
{
TBBUTTONINFO tbbi = { sizeof(tbbi), …Run Code Online (Sandbox Code Playgroud) 我想从VS2010切换到VS2015但是关于V140_XP的文档对我来说并不清楚.我有两个问题:
我使用静态库(/ MT).所以我不需要vcruntime140.dll或任何其他以前的运行时库.我应该将平台工具集设置为V140_XP以在Windows XP中运行我的应用程序吗?
如果我没有将平台工具集设置为XP,我的应用程序是否会在Windows 7及更高版本上运行正常?
通常,GetFileAttributesW(L"C:")return 0x10(FILE_ATTRIBUTE_DIRECTORY),这是合理的.
在某些情况下,GetFileAttributesW(L"C:")将返回0x2416(FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)
我想知道是什么让它发生以及如何摆脱它.这个问题使得boost::filesystem::canonical无法正常工作.你有什么主意吗?
我目前正在 Visual C/C++ 中使用 SDL2 + windows.h 库开发 GameBoy/GameBoyColor 模拟器以获取附加功能。我已成功将菜单项附加到 SDL 创建的窗口,但是在单击菜单项时尝试处理窗口发送的消息时遇到了麻烦...带有窗口菜单项的正在运行的应用程序的图像
在我的设计中,我决定创建一个单独的源文件,其命名空间包含各种程序实用程序(例如窗口管理功能)。因此,我创建了一个名为的函数getMenuEvent(),它由窗口实例的消息循环组成,从技术上讲,它应该WndProc()在同一名称空间中调用我定义的函数来查看其中的内容wParam......
这是我编写的实用程序命名空间源文件
HWND getSDLWinHandle(SDL_Window* win)
{
SDL_SysWMinfo infoWindow;
SDL_VERSION(&infoWindow.version);
if (!SDL_GetWindowWMInfo(win, &infoWindow))
{
std::cout << "test";
return NULL;
}
return (infoWindow.info.win.window);
}
//Initializes the native windows drop down menu elements of the window
void ActivateMenu(HWND windowRef)
{
hMenuBar = CreateMenu();
hFile = CreateMenu();
hEdit = CreateMenu();
hHelp = CreateMenu();
AppendMenu(hMenuBar, MF_POPUP, (UINT_PTR)hFile, "File");
AppendMenu(hMenuBar, MF_POPUP, (UINT_PTR)hEdit, "Edit");
AppendMenu(hMenuBar, MF_POPUP, (UINT_PTR)hHelp, "Help"); …Run Code Online (Sandbox Code Playgroud) 我需要使用 pywin32 检查窗口是否最大化。我使用的是 Windows 10 机器。
我已经查看了文档,但找不到直接的解决方案,有任何线索吗?
我写了一个包含网格控件的类.我想通过调用Create函数创建自定义网格类.
有没有办法可以赶上这个活动?
假设我写了一个代码:
int main()
{
int i,a=2147483647;
if((2*a)<0)
printf("hello");
else
printf("world");
}
Run Code Online (Sandbox Code Playgroud)
输出是世界的.但对于 :
int main()
{
int i,a=2147483647;
if((a+a)<0)
printf("hello");
else
printf("world");
}
Run Code Online (Sandbox Code Playgroud)
输出是hello.
这是怎么回事?
存储在内存中的2*a和a + a的值在哪里(内存位置的数据类型是什么?)