1
我試圖在C編寫的Windows應用程序中顯示隨機數,我的程序編譯但沒有顯示在窗口中。我使用Visual Studio 2010,有人提到微軟編譯器不能識別我的for循環? 林不知道你需要多少代碼,所以我加了全部。輸出不顯示
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX_BUFF_SIZE 1024
#define IDM_FILE_RUN 40001
#define IDM_APP_EXIT 40002
//Window Function
LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,
LPSTR lpszArgs, int nWinMode)
{
WNDCLASS wcls;
HWND hwnd;
MSG msg;
// Name of window and window class
LPCWSTR szWinName = L"Threads Program";
LPCWSTR szClassName = L"ThreadsProgram";
wcls.hInstance = hThisInst;
wcls.lpszClassName = szClassName;
wcls.lpfnWndProc = WindowFunc;
wcls.style = 0;
wcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcls.hCursor = LoadCursor(NULL, IDC_ARROW);
wcls.lpszMenuName = NULL;
wcls.cbClsExtra = 0;
wcls.cbWndExtra = 0;
wcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
// Register windows class
if(!RegisterClass(&wcls))
{
return 0;
}
// Create main window
hwnd = CreateWindow(szClassName,
szWinName,
WS_OVERLAPPEDWINDOW,
100,
100,
400,
400,
HWND_DESKTOP,
NULL,
hThisInst,
NULL);
// Show main window
ShowWindow(hwnd, nWinMode);
UpdateWindow(hwnd);
// Message loop
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
void MyOutputDebugString(const char *str, ...)
{
char buf[4096];
va_list ptr;
va_start(ptr,str);
vsprintf(buf,str,ptr);
OutputDebugStringA(buf);
}
LRESULT CALLBACK WindowFunc(HWND hMainWindow, UINT message,
WPARAM wParam, LPARAM lParam)
{
static char textBuffer[MAX_BUFF_SIZE];
static int nRead;
switch(message)
{
case WM_CREATE:
{
HMENU hMenu;
HMENU hMenuPopup;
// create menus
hMenu = CreateMenu();
hMenuPopup = CreateMenu();
// populate menus
AppendMenu(hMenuPopup, MF_STRING, IDM_FILE_RUN, L"&Choose Balls");
AppendMenu(hMenuPopup, MF_STRING, IDM_APP_EXIT, L"&Exit");
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hMenuPopup, L"&File");
// attach menus to main window
SetMenu(hMainWindow, hMenu);
}
break;
case WM_COMMAND:
{
// Obey command
switch(LOWORD(wParam))
{
case IDM_FILE_RUN:
{
int i;
srand (time(NULL));
for (i = 0; i < 6; i++)
MyOutputDebugString ("%i\n", (rand()% 49) + 1);
return 0;
}
break;
case IDM_APP_EXIT:
SendMessage(hMainWindow, WM_CLOSE, 0, 0);
break;
}
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hMainWindow, message, wParam, lParam);
}
return 0;
}// Window function
任何幫助將是偉大的。 謝謝
你希望你的輸出出現在什麼窗口? 'OutputDebugString()'輸出到調試輸出,這通常只在諸如Visual Studio的開發環境或類似DebugView的調試工具(SysInternals)中可見。 – tinman 2012-08-15 20:20:49
printf也不工作,我被告知OutputDebugString是一個窗口應用程序。 – 2012-08-15 20:24:12
@GennySaxo如果您在Visual Studio中以調試模式運行OutputDebugString,它將顯示在Visual Studio內的輸出窗口中,它不會顯示在您自己的程序中的任何位置。 – nos 2012-08-15 20:27:26