小编Sre*_*yan的帖子

C++类空类大小为1个字节

我是C++的新手,在C++中发现了一个特殊的功能.我看到一个空的大小是1个字节,我做了一些研究,发现这是完成的,因为每个对象必须有一个不同的地址.但是我想知道放置的那个1字节的内容是什么.我知道它不会持有"this"指针,但它是一个虚拟字节还是实际上有一些内容?

c++ sizeof

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

什么是子类和API挂钩?

我是Windows API编程的新手,我想用外行的术语知道什么是子类和API挂钩.我正在做一个使用所有者绘制控件的项目,我有两个术语不断出现.现在我已经在CodeProject.com上看到了很多关于这些主题的详细教程,但问题是所有这些都使用MFC,我在纯Win32编码.如果有人知道上述主题的任何好的教程,那么请发布链接.还试着避免链接到msdn,因为新手我无法弄清楚那里写的是什么.

windows winapi visual-studio visual-c++

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

Win32 代码异常

我正面临一个非常奇怪的问题。任何人都可以告诉我以下代码有什么问题-:

#include <Windows.h>

LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);

char szWinName[]="MyWin";

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,
                   LPSTR lpszArgs, int nWinMode)
{
    HWND hwnd;
    MSG msg;
    WNDCLASSEX wndclass;

    wndclass.cbSize=sizeof(WNDCLASSEX);

    wndclass.hInstance=hThisInst;
    wndclass.lpszClassName=szWinName;
    wndclass.lpfnWndProc=WindowFunc;
    wndclass.style=0;

    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION)
    wndclass.hIconSm=NULL;
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);

    wndclass.lpszMenuName=NULL;
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;

    wndclass.hbrBackground=(HBRUSH) GetStockObject(LTGRAY_BRUSH);

    if(!RegisterClassEx(&wndclass)) return 0;

    hwnd=CreateWindow(
        szWinName,
        "Hello World",
        WS_OVERLAPPED,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        500,
        500,
        NULL,
        NULL,
        hThisInst,
        NULL
        );

    ShowWindow(hwnd, nWinMode);
    UpdateWindow(hwnd);

    while(GetMessage(&msg, NULL, 0, 0)>0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;

}

LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wparam, …
Run Code Online (Sandbox Code Playgroud)

c c++ user-interface winapi

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

Visual C++中的Ambigous Pointers

大家好,我是Visual C++中Win32 API编程的新手.我使用的是Microsoft Visual Studio 2008专业版.我对指针有点困惑.请注意,虽然我可能是Windows编程的新手,但我不是C或C++的新手因此我理解指针的概念.导致问题的指针与对话框中的日期和时间选择器控件有关.现在根据msdn文档,日期和时间选择器使用WM_NOTIFY消息与应用程序通信,消息中的LPARAM将是指向NMHDR结构的指针.即 - : '日期和时间选择器(DTP)控件在收到用户输入或进程并对回调字段作出反应时发送通知代码.控件的父节点以WM_NOTIFY消息的形式接收这些通知代码.

现在,我可以通过在收到WM_NOTIFY消息时将LPARAM强制转换为NMHDR指针来访问NMHDR结构.这如下 - :

case WM_NOTIFY:
            if ((((NMHDR*)lparam)->idFrom == IDC_DATETIMEPICKER)&&
                ((NMHDR*)lparam)->code == DTN_DATETIMECHANGE)
            { LPNMDATETIMECHANGE lpChange=(LPNMDATETIMECHANGE)lparam;
            DisplayTime(&(lpChange->st));
                MessageBox(NULL,"wm_notify","test",MB_OK);
            }
            return TRUE;
Run Code Online (Sandbox Code Playgroud)

但是看看这段代码片段的第四行.我正在将相同的lparam(我刚刚将其转换为NMHDR结构)转换为NMDATETIMECHANGE结构.

我的问题是这怎么可能?我如何将一个参数投射到引用两个不同结构的两个不同指针中?NMHDR和LPNMDATETIMECHANGE结构是根本不同的结构.你可以在这里查看 - :NMHDRNMDATETIMECHANGE

这怎么可能?我知道可以将指针的值存储在具有不同数据类型的其他变量中,并在我们想要使用它时再次将其转换回来.但是如何让一个指针指向两个不同的结构呢?我的意思是我不认为NMHDRNMDATETIMECHANGE结构在内存中是同一个实体,所以单个指针如何同时引用它们?我希望他们有两个不同的内存地址?哦,请注意,此代码已经过测试,有效.我的源代码如下:

#include <Windows.h>
#include <CommCtrl.h>
#include <cstdio>
#include "resource.h"

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")

LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK DialogFunc(HWND, UINT, WPARAM, LPARAM);

VOID InitOptions(HWND);
VOID DisplayTime(SYSTEMTIME*); …
Run Code Online (Sandbox Code Playgroud)

winapi pointers datepicker visual-c++

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

C - 奇怪的2d数组指针行为

将2d数组传递给函数时遇到问题.看看代码 - :

#include<stdio.h>

void display(int (*arr)[3],int i,int j,int length,int breadth) {

    for(;i<length;i++){
            for(;j<breadth;j++){
                printf("%d ",arr[i][j]);
            }
        printf("\n");
    }
}

void main() {
    int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    display(arr,0,0,3,3);
    }
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我只能打印出2D数组的第一行.但是当不使用形式参数中的i和j而是将它们声明为display()函数中的局部变量时,一切正常.为什么我不能直接使用传递给函数的本地值?我在Visual Studio 2013中使用Visual C++命令行编译器.

c arrays

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