Ich schreibe eine kleine, dialogbasierte Win32-Anwendung. Ich muss ein zweites Dialogfeld erstellen und anzeigen, wenn auf eine Menüschaltfläche geklickt wird. Ich habe die HWND in einer externen Header-Datei deklariert - wedge.hDefinition von extern deklarierten Variablen funktioniert in einer Funktion, aber nicht in einem anderen
wedge.h
#pragma once
#include <Windows.h>
#include "utilities.h"
extern HWND wedgedialog;
INT_PTR CALLBACK WedgeProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
Wenn ich versuche und wedgedialog in meiner WinMain-Funktion definieren und die Variable in meiner DialogProc Funktion verwenden, ich einen "ungelösten externen Symbol" -Fehler vom Linker erhalten. Wenn ich Kedgedialog in meinem DialogProc definiere und verwende, funktioniert alles gut. Warum funktioniert die Definition in einer Funktion, aber nicht in der anderen? Denken Sie daran, meine WinMain- und DialogProc-Funktion befinden sich in derselben Datei.
main.cpp
INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE h0, LPTSTR lpCmdLine, int nCmdShow)
{
HWND hDlg;
MSG msg;
BOOL ret;
InitCommonControls();
hDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(MAIN), 0, DialogProc, 0);
HWND wedgedialog = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(WEDGE), hDlg, WedgeProc);
ShowWindow(hDlg, nCmdShow);
HMENU menu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENU1));
SetMenu(hDlg, menu);
while ((ret = GetMessage(&msg, 0, 0, 0)) != 0) {
if (ret == -1)
return -1;
if (!IsDialogMessage(hDlg, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
return TRUE;
break;
case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_EDIT_WEDGESETTINGS:
ShowWindow(wedgedialog, SW_SHOW);
break;
}
return TRUE;
break;
}
return FALSE;
}