小编Qua*_*002的帖子

如何在C++对象中初始化数组

在阅读如何在C中初始化数组之后,特别是:

但是,不要忽视明显的解决方案:

int myArray [10] = {5,5,5,5,5,5,5,5,5,5};

我试过这样的事情:

#include <iostream>

class Something {
private:

int myArray[10];

public:

Something() {
    myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
}

int ShowThingy(int what) {
    return myArray[what];
}

~Something() {}
};

int main () {
   Something Thing;
    std::cerr << Thing.ShowThingy(3);
}
Run Code Online (Sandbox Code Playgroud)

我得到:

..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:10:48: error: cannot convert '<brace-enclosed initializer list>' to 'int' in assignment
Run Code Online (Sandbox Code Playgroud)

在这种情况下显而易见的并不那么明显.我真的希望我的阵列的启动也更加动态.

我累了:

private:
    int * myArray;

public:
    Something() …
Run Code Online (Sandbox Code Playgroud)

c++ arrays initialization class

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

第三个SetWindowSubclass参数中的uIdSubclass是什么?

根据:http : //msdn.microsoft.com/zh-cn/library/windows/desktop/bb762102(v=vs.85).aspx

SetWindowSubclass原型是:

BOOL SetWindowSubclass(
   __in  HWND hWnd,
   __in  SUBCLASSPROC pfnSubclass,
   __in  UINT_PTR uIdSubclass,
   __in  DWORD_PTR dwRefData
);
Run Code Online (Sandbox Code Playgroud)

好吧,我明白了hWndpfnSubclassdwRefData

我找不到很好的信息,我该怎么设置uIdSubclass

MSDN说:

子类ID。该ID与子类过程一起唯一标识一个子类。若要删除子类,请将子类过程和此值传递给RemoveWindowSubclass函数。该值通过uIdSubclass参数传递给子类过程。

好的,可以理解,但仍然可以从哪里获得此ID?是我创造的东西还是某个地方得到的东西?如果是我创建的东西,它应该是什么样?

我在C ++和Win32 API中进行此操作,仅此而已。

谢谢。

c++ winapi

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

C++加速键不起作用

我无法让加速器工作.我正在使用C++.

设置并显示我的窗口后.

MENUITEMINFOW mAbout;
mAbout.cbSize = sizeof(MENUITEMINFO);
mAbout.fMask  = MIIM_TYPE | MIIM_ID;
mAbout.wID    = (UINT) ID_ABOUT;
mAbout.fType  = MFT_STRING;
mAbout.dwTypeData = (LPWSTR)L"&About";

InsertMenuItemW(HelpMenu,   0, TRUE, &mAbout);
Run Code Online (Sandbox Code Playgroud)

我的菜单运行正常,并调用我的"关于"框,没有问题.

现在,在消息循环之前,我加载了加速器:

// Load accelerators.
 HACCEL hAccelerators = LoadAcceleratorsW(hInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR));
Run Code Online (Sandbox Code Playgroud)

然后我的主要消息循环:

while(GetMessageW(&msg, NULL, 0, 0) > 0) {
    if (! TranslateAcceleratorW(msg.hwnd, hAccelerators, &msg)) {
        TranslateMessage(&msg);
        DispatchMessageW(&msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的WndProc消息句柄(再次,从菜单中工作)

case WM_COMMAND: {
    if (HIWORD(wParam) == 0) {
        if (LOWORD(wParam) == 101) {
            testDialog(hInstance ,hWnd,(LPSTR)"Testing");
        }
        if (LOWORD(wParam) == ID_ABOUT) {
            DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUTDIALOG), hWnd, &AboutDialogProc); …
Run Code Online (Sandbox Code Playgroud)

c++ winapi mingw accelerator

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

Eclipse-Juno撤消/重做启用?

快速提问,如何在Eclipse-Juno中启用Undo/Redo?

我在用:

Eclipse for Mobile Developers
Juno Service Release 1
Build id: 20120920-0800
Run Code Online (Sandbox Code Playgroud)

即使只是在编辑器中输入一些随机文本,Undo/Redo也会变灰并且键盘快捷键不起作用.没有撤消/重做我就无法工作.(上帝只知道有多少次把我的屁股拉出了火.)

我可以找到的撤消设置是:

窗口 - >首选项 - >常规 - >编辑器 - >文本编辑器 - >撤消历史记录大小.

它的值为200,我尝试将其更改为1000.

我曾尝试使用Google和Stack Overflow.有一个类似的问题,但它不是如何启用撤消/重做.这是Eclipse的干净安装.

是否有一个启用检查我错过了我错过的这些选项屏幕中的某个地方?

我正在使用带有"经典"主题的Java透视图.

我的java -version报告

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

如果没有解决方案,并且这是一个错误(并且非常糟糕),我可以将旧的3.7与上述版本的Java一起使用吗?我正在学习Java,所以我可以编写Android应用程序,但我还没有安装SDK.

eclipse eclipse-juno

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

即使数据在exe中,FindResource()也无法找到数据

我一直都在这一个,而我只是陷入困境.我一直在构建一个项目,我想将一个文本文件作为资源嵌入到可执行文件中.我理解这个"应该"如何工作的所有基础知识,但由于某种原因,它不是.所以,让我从目前为止开始,也许可以解决问题.

这里有两个函数,第一个,EnumResNameProc试图调试我自己的问题,第二个,LoadFileInResource是我试图工作的函数.这有点凌乱,因为当我开始遇到问题时,我正处于构建它的过程中.

确切的问题是,FindResourceExA返回NULL,我确实丢失了.我知道这是一个错误,返回代码是1813,"资源未找到".

我在这个项目中有其他资源,我有一个版本节点,一个mainifest节点,(其中,我没有直接阅读)我有一个图标节点(我正在申请我的窗口系统菜单图标)和一个位图(那个我正在加载纹理.)这些都有定义的类型,例如,Bitmap的类型是12.现在,我试图加载一个文本文件,其中"用户定义"类型为10.我知道数据是INSIDE可执行文件,因为如果我在文本编辑器中打开它...(是的,我尝试过)它存在,因此,它被包含在内.

第一个函数是尝试遍历所有文件资源以尝试查找数据.它找到了类型2,3,14,16和24.但不是10.我已经排除了这些其他类型作为上述资源.(位图= 2),(icon = 3),(RT_ICON(3)+ RT_ICON_GROUP(11)= 14)(版本= 16),(清单= 24).用户定义应该是类型10,它没有找到它.

我的Resources.rc文件包括以下内容:

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDR_textfile1      textfile       ".\\Data\\World.txt"
Run Code Online (Sandbox Code Playgroud)

这定义了要加载的文件(再次,我知道这有效,我可以在可执行文件中看到代码的文本.)

我的resources.h文件定义了以下内容:

#define IDR_textfile1                           102
Run Code Online (Sandbox Code Playgroud)

因此,它被定义,包含,构建,并且所有其他资源都可以工作,但FindResourceExA在此处返回NULL.所有包含文件都排成一行,(如果不是,我会收到警告和错误.)

所以,问题是,我正确地调用了FindResourceExA吗?它被定义为:

WINBASEAPI HRSRC WINAPI FindResourceExA(HINSTANCE,LPCSTR,LPCSTR,WORD);
Run Code Online (Sandbox Code Playgroud)

好吧,我已经尝试过HINSTANCE,null,hInstance在WinMain中传递给我的Windows,甚至是GetModuleHandleA的结果,没有骰子.

对于LPCSTR,这是资源ID,我已经尝试了你看到的,MAKEINTRESOURCE(IDR_textfile1),我也试过硬编码ID号,在这种情况下,102.没有骰子.对于类型,我已经厌倦了其他变化,根据微软的正确值应为10.这就是为什么我创建EnumResNameProc,试图查看其他ID存在,从0到500,我回来的是上面列出的那些,关于机会的事情被定义为有趣.没有骰子.

我已经尝试了FindResourceExA FindResourceA(有和没有'Ex')No Dice.

我知道它就在那里,我已经学到了更多,然后我关心这个功能,但是它找不到它,而且我不知道还有什么可以尝试.

至于开发环境,我使用MinGW + Eclipse + CDT,并使用GCC工具中的winres来构建资源对象文件.我已经在winres中查找错误,看看它是否在二进制类型上做了一些有趣的事情.(即使我正在加载文本文件,这也是未定义的内容.)哦,我还尝试将文件重新保存为ANSI,UTF-8和UNICODE,以防文本的二进制格式重要.

我不知所措,我不知道还有什么可以尝试的.我知道数据存在,我只是不知道为什么它不会访问它.Windows API调用既不能查看数据,也不能以screwey方式编码数据,因此无法访问它.

我还能尝试什么?

BOOL CALLBACK EnumResNameProc (
  HMODULE hModule,
  LPCTSTR lpszType,
  LPTSTR lpszName,
  LONG_PTR lParam)
{
    std::cerr << "WTF INFO BEGIN here! \n";
    // std::string info = lpszName;
    int a = lParam;
    std::cerr  << "We found something: " << …
Run Code Online (Sandbox Code Playgroud)

c++ resources winapi

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