HWND와 DC가 구조체의 벡터에 포함 된 다중 인스턴스 대화 상자가 있습니다. CreateWindowEx()
을 호출하기 전에 구조체의 새 인스턴스에 메모리를 할당하고 포인터를 WndProc에 전달합니다 (lpParam
). 나는 다음과 같은 코드를 가지고있는 WndProc을 내부 포인터로 구조체 멤버에 액세스
HexParams Hex;
HexParams *pHex;
if (uMsg == WM_NCCREATE) {
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR) ((CREATESTRUCT *)lParam)->lpCreateParams);
return TRUE;
} else {
LONG_PTR lpUserData = GetWindowLongPtr(hDlg, GWLP_USERDATA);
if (lpUserData) {
pHex = (HexParams *)lpUserData;
Hex = *pHex;
} else
return DefWindowProc(hDlg, uMsg, wParam, lParam);
}
그럼 난 끊임없이 memebrs을 액세서하는 Hex.Member
를 사용하고 전체의 WndProc을 통해, 그들로부터 읽고 (그들에게 쓰는 것은 때를에서 왼쪽 된 경우 단일 인스턴스이고 구조체는 전역 적입니다.) 그래서 다중 인스턴스 지원을 추가 할 때 포인터를 간단히 참조 해제하면 해당 벡터의 구조체 memebr을 얻을 수 있기를 바랍니다. 그 전에 Hex = *pHex;
일에도 불구하고
Hex.DC = GetDC(hDlg);
pHex->DC = GetDC(hDlg);
:
그러나, 다음의 예는 다른 일을. pHex->DC
내 벡터 요소에 씁니다, 그러나 Hex.DC
어딘가에 내가 알아낼 수 없다 씁니다. 코드에서 Hex.Member
사용을 보존 할 방법이 있습니까? 아니면 모두를 pHex->Member
으로 변환해야합니까?
"포인터가 누락되었습니다."그러나 제대로 사용하는 방법을 알 수 없습니다.
'Hex'는'* pHex'의 ** copy **입니다. ** 포인터는 참조가 아닙니다 ** ** –