小编GIL*_*ESH的帖子

溢出的无符号整数

unsigned int当我溢出它时会包含什么?具体来说,我想用两个unsigned ints 进行乘法:unsigned int乘法结束后会有什么?

unsigned int someint = 253473829*13482018273;
Run Code Online (Sandbox Code Playgroud)

c++ integer-overflow unsigned-integer

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

在线运行C++代码?

有网站我可以去网上运行C++代码吗?我见过一些编译器,但有没有一个也可以从中接收输入cin?我想要一个基本上可以在线托管C++ .exe的版本,更可取的是它是否像VC++平台一样.

c++ compiler-construction visual-c++

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

如何在c ++中使用fstream读取和写入无符号字符?

到目前为止,我有代码从ifstream读取unsigned char:

ifstream in;
unsigned char temp;

in.open ("RANDOMFILE", ios::in | ios::binary);
in.read (&temp, 1);
in.close ();
Run Code Online (Sandbox Code Playgroud)

它是否正确?我还尝试将一个unsigned char写入ofstream:

ofstream out;
unsigned char temp;

out.open ("RANDOMFILE", ios::out | ios::binary);
out.write (&static_cast<char>(temp), 1);
out.close ();
Run Code Online (Sandbox Code Playgroud)

但是我写错了以下错误:

error C2102: '&' requires l-value
Run Code Online (Sandbox Code Playgroud)

这个错误用于阅读:

error C2664: 'std::basic_istream<_Elem,_Traits>::read' : cannot convert parameter 1 from 'unsigned char *' to 'char *'
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我我的代码有什么问题,或者我如何从fstream读取和写入未签名的字符,我们将不胜感激.

c++ visual-c++

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

传递额外的wParam/lParam参数?

标准窗口过程函数采用此原型:

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
Run Code Online (Sandbox Code Playgroud)

当一个消息如WM_MOUSEMOVEWM_CHAR,该WndProc函数将接收来自该窗口的消息,以及任何额外的参数,这些参数将与msg和wParam/lParam一起使用.

我现在拥有的是一堂课.说

class Random
{
    public:
        void Initialize ();

    private:
        void Draw ();
        HWND hWnd;

    friend LRESULT CALLBACK RandomProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
};
Run Code Online (Sandbox Code Playgroud)

在之后hWnd进行初始化,并通过创建Initialize (),它会发送消息,如WM_LBUTTONDOWNRandomProc.一旦接收到消息,我想RandomProcDraw ()重画类的窗口Random.

问题是,我将有多个Random变量,每个变量都有一个窗口.所有窗口都会发送消息RandomProc,并希望它重绘相应的窗口hWnd.我不知道哪个随机变量基于hWnd参数发送消息,也不知道msg/wParam/lParam,因此无法访问相应的Draw ()函数,也无法重绘正确的窗口.

有没有办法在每次发送消息时将指针传递给窗口的类,或者是否有另一种方法来访问其hWnd发送消息的Random类?

c++ windows winapi visual-studio-2010 visual-studio-2008

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

滚动鼠标下的窗口

如果您看一下Visual Studio 2012,您会注意到如果使用鼠标滚轮,鼠标下方的窗口将滚动,而不是聚焦窗口.也就是说,如果您将光标放在代码编辑器中,并将鼠标移到"解决方案资源管理器"窗口并滚动,则解决方案资源管理器将滚动,而不是代码编辑器.但是,WM_MOUSEWHEEL消息只会被发送到焦点窗口,因此在这种情况下,代码编辑器.我们如何实现我们的程序,使WM_MOUSEWHEEL消息滚动鼠标下的窗口,这是直观的,而不是聚焦窗口?

c++ windows winapi messages mouseevent

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

ifstream :: read在ASCII 26处失败

这个问题长期困扰着我.例如,代码

ifstream in;
char temp;
int a;

in.open ("Random.txt");

for (a = 0;a < 10000;a++)
    in.read (&temp, 1);

in.close ();
Run Code Online (Sandbox Code Playgroud)

工作正常,直到ifstream遇到替换字符(ASCII = 26).然后,对于所有后续角色,ifstream::read给我temp = -1.我真的不希望这种情况发生,而是希望它继续从文件中读取字符而不是-1.我做错了什么?

c++ ascii visual-studio-2010 visual-c++ visual-c++-2010

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

内存泄漏检测文件错误

我有一个程序,应该输出有关其内存泄漏的信息.但是,它不起作用.以下是该计划:

#include <crtdbg.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    FILE *out_file;
    int *a = new int;

    //Redirect the error stream to a file.
    freopen_s (&out_file, "Memory Leaks.txt", "w", stderr);

    //Turn on debugging for memory leaks. This is automatically turned off when the build is Release.
    _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    _CrtSetReportMode (_CRT_WARN, _CRTDBG_MODE_FILE);
    _CrtSetReportFile (_CRT_WARN, _CRTDBG_FILE_STDERR);
    _CrtSetReportMode (_CRT_ERROR, _CRTDBG_MODE_FILE);
    _CrtSetReportFile (_CRT_ERROR, _CRTDBG_FILE_STDERR);
    _CrtSetReportMode (_CRT_ASSERT, _CRTDBG_MODE_FILE);
    _CrtSetReportFile (_CRT_ASSERT, _CRTDBG_FILE_STDERR);

    return …
Run Code Online (Sandbox Code Playgroud)

c++ memory-leaks visual-studio-2010 crtdbg.h visual-c++

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

WinAPI C ++:重新编程窗口调整大小

我有一个窗口,我想像其他任何窗口一样将边界实现为调整边界大小。从评论和答案中获取建议,我重新编写了代码。对于WM_GETMINMAXINFO,我有:

MINMAXINFO *min_max = reinterpret_cast<MINMAXINFO *>(lparam);

min_max->ptMinTrackSize.x = MINX;
min_max->ptMinTrackSize.y = MINY;
Run Code Online (Sandbox Code Playgroud)

MINX和MINY是我希望窗口最小的尺寸。对于WM_NCHITTEST,我有:

RECT wnd_rect;
int x, y;

GetWindowRect (window, &wnd_rect);
x = GET_X_LPARAM (lparam) - wnd_rect.left;
y = GET_Y_LPARAM (lparam) - wnd_rect.top;

if (x >= BORDERWIDTH && x <= wnd_rect.right - wnd_rect.left - >BORDERWIDTH && y >= BORDERWIDTH && y <= TITLEBARWIDTH)
    return HTCAPTION;

else if (x < BORDERWIDTH && y < BORDERWIDTH)
    return HTTOPLEFT;
else if (x > wnd_rect.right - wnd_rect.left - BORDERWIDTH && y < BORDERWIDTH)
    return …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi resize paint

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

CreateWindowEx返回NULL

以下是我的代码的一部分.每次运行程序时,CreateWindowExSPanel都会返回NULL,触发错误.任何人都可以看到这段代码有什么问题吗?

SPanelProc并且MainWndProc已经宣布,并且是原型LRESULT CALLBACK SPanelProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);.

我正在编程的环境是Visual C++ 2010.

为什么CreateWindowEx总是回来NULL

#include <Windows.h>
#include <WindowsX.h>

LRESULT CALLBACK SPanelProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_MOUSEMOVE:

        break;
    }

    return 0;
}

void Init ()
{
    HWND child;
    HINSTANCE hInstance = (HINSTANCE)(GetWindowLongPtr (parent, GWLP_HINSTANCE));
    WNDCLASSEX wc;
    const char PanelClassName[] = "SPanel"; //ClassName of the panel. Do not …
Run Code Online (Sandbox Code Playgroud)

c++ winapi visual-studio-2010 createwindowex visual-c++-2010

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

在C++中将double*转换为int*

标题非常自我解释.我想将一个类型double *转换为一个类型int *.我意识到我可以使用C型(int *)转换来做我想要的,但是有没有办法使用C++类型转换static_cast等进行此类转换?

c++ types pointers casting

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

For循环初始化

所以我想知道我是否可以在for循环的声明中声明一个变量.这段代码有效吗?

for (int a = 0;a < len + 1;a++);
Run Code Online (Sandbox Code Playgroud)

在什么范围a内存在?它会在for循环之外无效,还是我仍然可以访问它?

另外,我是否可以在单个for循环语句中声明或初始化2个变量?

for (int a = 0, b = len + 1;a < b;a++);
Run Code Online (Sandbox Code Playgroud)

这是一个有效的陈述吗?

c++ loops for-loop visual-studio-2010 visual-c++

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