コンボボックスにて日付を選択してその選択した年から現在までの経過年月を取得したいのですが取得しようとすると文字化けして表示されます。
void S2InputSummaryDlg::calcPassYear()
{
CComboBox* pCB = (CComboBox*)GetDlgItem( IDC_COMPLETION_YEAR_CBO );
int iNum = pCB->GetCurSel();
CString cValue;
pCB->GetLBText ( iNum, cValue );
int iYear = ::atoi( cValue );
//-------------------------------
// 当該システムの日付、時刻を取得
//-------------------------------
SYSTEMTIME SystemTime;
::GetLocalTime( &SystemTime );
char cbuffer[MAX_PATH];
::_itoa( SystemTime.wYear, cbuffer, 10 );
CEdit* pEdt;
int zValue;
pEdt = (CEdit*)GetDlgItem( IDC_PASS_YEAR_EDIT );
if( SystemTime.wYear - iYear < 0 )
pEdt->SetWindowText( 0 );
else
zValue = SystemTime.wYear - iYear;
pEdt->SetWindowText( zValue ) ;
}
エラーはSetWindowTextA' : 1 番目の引数を 'int' から 'const char *' に変換できません。です。
よろしくお願いします。
文字化けはポインタへの変換をした(と思う)状態で実行した時に起こりました…
そのまんまだと思いますが……。
intをそのままconst char *,つまりは文字列にすることはできません。
CString::Formatを使ったり,wsprintfを使うなどしてintを文字列にするか,
CWnd::SetDlgItemIntを使うかする必要があります。
ちなみに,
> pEdt->SetWindowText( 0 );
は,
pEdt->SetWindowText(static_cast<const char *>(0));
だから,空ポインタを渡していることになります。
#数値0ではないことに注意。
v(^o^)v
お返事ありがとうございます。
解決印をどなたかにつけてもらいましたが…
if( SystemTime.wYear - iYear < 0 )
pEdt->SetWindowText( 0 );
else
zValue = SystemTime.wYear - iYear;
Edit1.Format("%d", zValue);
pEdt->SetWindowText( Edit1 );
elseの方は↑でうまくいきました。
if( SystemTime.wYear - iYear < 0 )
の時の0が表示されないのですが…
同様に0を表示しようとすると
else 文が if と一致しません。とエラーがでてしまいます。
よろしくお願いします。
if( SystemTime.wYear - iYear < 0 )
pEdt->SetWindowText( 0 );
else{
zValue = SystemTime.wYear - iYear;
Edit1.Format("%d", zValue);
pEdt->SetWindowText( Edit1 );
}
elseの{}が抜けてるようですが
申し訳ありません…
解決です。お手数おかけいたしました…
本当にごめんなさい…
> pEdt->SetWindowText( 0 );
だからこれは間違いだと書いているのに……。
数値の0と数字の'0'と文字列の"0"はちゃんと区別できていますか?
ツイート | ![]() |